-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';
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: [] };
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
Promise.resolve().then(() => this.downloadHtmlHref = "");
}
}
+
+ public ngOnDestroy(): void
+ {
+ this.subscriptions.forEach(s => s.unsubscribe());
+ }
}