]> gitweb.hhaalo.de Git - speisekarten-editor.git/commitdiff
add: handle subscriptions in app component
authorBastian Dehn <hhaalo@arcor.de>
Sun, 24 Jul 2022 08:20:04 +0000 (10:20 +0200)
committerBastian Dehn <hhaalo@arcor.de>
Sun, 24 Jul 2022 08:20:04 +0000 (10:20 +0200)
src/app/app.component.ts

index e4c1ead21af05c02401fd037f0e41eb9eb5c7940..08e56807befecbafc9788a570e0a3caa719b34df 100644 (file)
@@ -1,6 +1,10 @@
-import { Component, ViewChild, AfterViewChecked } from '@angular/core';
+import { Component,
+       ViewChild,
+       AfterViewChecked,
+       OnDestroy } from '@angular/core';
 import { SafeUrl } from '@angular/platform-browser';
-import { Observable } from 'rxjs';
+import { Observable,
+       Subscription } from 'rxjs';
 import { ITitle } from './ititle';
 import { ISubtitle } from './isubtitle';
 import { IFood } from './ifood';
@@ -15,8 +19,10 @@ import { version } from '../environments/version';
        styleUrls: ['./app.component.css']
 })
 
-export class AppComponent implements AfterViewChecked
+export class AppComponent implements AfterViewChecked, OnDestroy
 {
+       private subscriptions: Subscription[] = [];
+
        @ViewChild("exportJsonLink") exportJsonLink: any;
        @ViewChild("exportHtmlLink") exportHtmlLink: any;
        public foodcard: IFoodCard = { Titles: [] };
@@ -31,25 +37,25 @@ export class AppComponent implements AfterViewChecked
        public exportJson(): void
        {
                let observ: Observable<SafeUrl> = this.jsonFileService.exportJson(this.foodcard);
-               observ.subscribe((next) => {
+               this.subscriptions.push(observ.subscribe((next) => {
                        this.downloadJsonHref = next;
-               });
+               }));
        }
 
        public exportHtml(): void
        {
                let observ: Observable<SafeUrl> = this.htmlExportService.exportHtml(this.foodcard);
-               observ.subscribe((next) => {
+               this.subscriptions.push(observ.subscribe((next) => {
                        this.downloadHtmlHref = next;
-               });
+               }));
        }
 
        public fileEvent(event: any): void
        {
                let importobserv: Observable<IFoodCard> = this.jsonFileService.importJson(event);
-               importobserv.subscribe((next) => {
+               this.subscriptions.push(importobserv.subscribe((next) => {
                        this.foodcard = next;
-               });
+               }));
        }
 
        public addTitle(): void
@@ -71,4 +77,9 @@ export class AppComponent implements AfterViewChecked
                        Promise.resolve().then(() => this.downloadHtmlHref = "");
                }
        }
+
+       public ngOnDestroy(): void
+       {
+               this.subscriptions.forEach(s => s.unsubscribe());
+       }
 }