refactor(demo): unsubscribe when destroy component

This commit is contained in:
KostyaDanovsky 2017-09-20 14:31:06 +03:00
parent 549be765f0
commit cceabef8eb
12 changed files with 96 additions and 37 deletions

View file

@ -1,4 +1,4 @@
import { Component, OnInit } from '@angular/core'; import { Component, OnDestroy, OnInit } from '@angular/core';
import { NbThemeService, NbMediaBreakpoint, NbMediaBreakpointsService } from '@nebular/theme'; import { NbThemeService, NbMediaBreakpoint, NbMediaBreakpointsService } from '@nebular/theme';
import { UserService } from '../../../@core/data/users.service'; import { UserService } from '../../../@core/data/users.service';
@ -8,19 +8,20 @@ import { UserService } from '../../../@core/data/users.service';
styleUrls: ['./contacts.component.scss'], styleUrls: ['./contacts.component.scss'],
templateUrl: './contacts.component.html', templateUrl: './contacts.component.html',
}) })
export class ContactsComponent implements OnInit { export class ContactsComponent implements OnInit, OnDestroy {
contacts: any[]; contacts: any[];
recent: any[]; recent: any[];
breakpoint: NbMediaBreakpoint; breakpoint: NbMediaBreakpoint;
breakpoints: any; breakpoints: any;
themeSubscription: any;
constructor(private userService: UserService, constructor(private userService: UserService,
private themeService: NbThemeService, private themeService: NbThemeService,
private breakpointService: NbMediaBreakpointsService) { private breakpointService: NbMediaBreakpointsService) {
this.breakpoints = breakpointService.getBreakpointsMap(); this.breakpoints = breakpointService.getBreakpointsMap();
themeService.onMediaQueryChange() this.themeSubscription = themeService.onMediaQueryChange()
.subscribe(([oldValue, newValue]) => { .subscribe(([oldValue, newValue]) => {
this.breakpoint = newValue; this.breakpoint = newValue;
}); });
@ -51,4 +52,8 @@ export class ContactsComponent implements OnInit {
]; ];
}); });
} }
ngOnDestroy() {
this.themeSubscription.unsubscribe();
}
} }

View file

@ -1,4 +1,4 @@
import { AfterViewInit, Component } from '@angular/core'; import { AfterViewInit, Component, OnDestroy } from '@angular/core';
import { NbThemeService } from '@nebular/theme'; import { NbThemeService } from '@nebular/theme';
declare const echarts: any; declare const echarts: any;
@ -10,11 +10,11 @@ declare const echarts: any;
<div echarts [options]="option" class="echart"></div> <div echarts [options]="option" class="echart"></div>
`, `,
}) })
export class ElectricityChartComponent implements AfterViewInit { export class ElectricityChartComponent implements AfterViewInit, OnDestroy {
option: any; option: any;
data: Array<any>; data: Array<any>;
themeSubscription: any;
constructor(private theme: NbThemeService) { constructor(private theme: NbThemeService) {
@ -41,7 +41,7 @@ export class ElectricityChartComponent implements AfterViewInit {
} }
ngAfterViewInit(): void { ngAfterViewInit(): void {
this.theme.getJsTheme().delay(1).subscribe(config => { this.themeSubscription = this.theme.getJsTheme().delay(1).subscribe(config => {
const eTheme: any = config.variables.electricity; const eTheme: any = config.variables.electricity;
this.option = { this.option = {
@ -184,4 +184,8 @@ export class ElectricityChartComponent implements AfterViewInit {
}; };
}); });
} }
ngOnDestroy() {
this.themeSubscription.unsubscribe();
}
} }

View file

@ -1,4 +1,4 @@
import { Component } from '@angular/core'; import { Component, OnDestroy } from '@angular/core';
import { NbThemeService } from '@nebular/theme'; import { NbThemeService } from '@nebular/theme';
import { ElectricityService } from '../../../@core/data/electricity.service'; import { ElectricityService } from '../../../@core/data/electricity.service';
@ -8,7 +8,7 @@ import { ElectricityService } from '../../../@core/data/electricity.service';
styleUrls: ['./electricity.component.scss'], styleUrls: ['./electricity.component.scss'],
templateUrl: './electricity.component.html', templateUrl: './electricity.component.html',
}) })
export class ElectricityComponent { export class ElectricityComponent implements OnDestroy {
data: Array<any>; data: Array<any>;
@ -16,12 +16,17 @@ export class ElectricityComponent {
types = ['week', 'month', 'year']; types = ['week', 'month', 'year'];
currentTheme: string; currentTheme: string;
themeSubscription: any;
constructor(private eService: ElectricityService, private themeService: NbThemeService) { constructor(private eService: ElectricityService, private themeService: NbThemeService) {
this.data = eService.getData(); this.data = eService.getData();
this.themeService.getJsTheme().subscribe(theme => { this.themeSubscription = this.themeService.getJsTheme().subscribe(theme => {
this.currentTheme = theme.name; this.currentTheme = theme.name;
}); });
} }
ngOnDestroy() {
this.themeSubscription.unsubscribe();
}
} }

View file

@ -1,4 +1,4 @@
import { Component } from '@angular/core'; import { Component, OnDestroy } from '@angular/core';
import { NbThemeService } from '@nebular/theme'; import { NbThemeService } from '@nebular/theme';
@Component({ @Component({
@ -6,13 +6,18 @@ import { NbThemeService } from '@nebular/theme';
styleUrls: ['./kitten.component.scss'], styleUrls: ['./kitten.component.scss'],
templateUrl: './kitten.component.html', templateUrl: './kitten.component.html',
}) })
export class KittenComponent { export class KittenComponent implements OnDestroy {
currentTheme: string; currentTheme: string;
themeSubscription: any;
constructor(private themeService: NbThemeService) { constructor(private themeService: NbThemeService) {
this.themeService.getJsTheme().subscribe(theme => { this.themeSubscription = this.themeService.getJsTheme().subscribe(theme => {
this.currentTheme = theme.name; this.currentTheme = theme.name;
}); });
} }
ngOnDestroy() {
this.themeSubscription.unsubscribe();
}
} }

View file

@ -1,4 +1,4 @@
import { Component, HostBinding } from '@angular/core'; import { Component, HostBinding, OnDestroy } from '@angular/core';
import { NbThemeService, NbMediaBreakpoint, NbMediaBreakpointsService } from '@nebular/theme'; import { NbThemeService, NbMediaBreakpoint, NbMediaBreakpointsService } from '@nebular/theme';
@Component({ @Component({
@ -12,7 +12,7 @@ import { NbThemeService, NbMediaBreakpoint, NbMediaBreakpointsService } from '@n
</nb-card> </nb-card>
`, `,
}) })
export class RoomsComponent { export class RoomsComponent implements OnDestroy {
@HostBinding('class.expanded') @HostBinding('class.expanded')
private expanded: boolean; private expanded: boolean;
@ -20,12 +20,13 @@ export class RoomsComponent {
breakpoint: NbMediaBreakpoint; breakpoint: NbMediaBreakpoint;
breakpoints: any; breakpoints: any;
themeSubscription: any;
constructor(private themeService: NbThemeService, constructor(private themeService: NbThemeService,
private breakpointService: NbMediaBreakpointsService) { private breakpointService: NbMediaBreakpointsService) {
this.breakpoints = breakpointService.getBreakpointsMap(); this.breakpoints = breakpointService.getBreakpointsMap();
themeService.onMediaQueryChange() this.themeSubscription = themeService.onMediaQueryChange()
.subscribe(([oldValue, newValue]) => { .subscribe(([oldValue, newValue]) => {
this.breakpoint = newValue; this.breakpoint = newValue;
}); });
@ -56,4 +57,8 @@ export class RoomsComponent {
private isSelected(roomNumber): boolean { private isSelected(roomNumber): boolean {
return this.selected === roomNumber; return this.selected === roomNumber;
} }
ngOnDestroy() {
this.themeSubscription.unsubscribe();
}
} }

View file

@ -1,4 +1,4 @@
import { AfterViewInit, Component, Input } from '@angular/core'; import { AfterViewInit, Component, Input, OnDestroy } from '@angular/core';
import { NbThemeService } from '@nebular/theme'; import { NbThemeService } from '@nebular/theme';
declare const echarts: any; declare const echarts: any;
@ -20,7 +20,7 @@ declare const echarts: any;
</nb-card> </nb-card>
`, `,
}) })
export class SolarComponent implements AfterViewInit { export class SolarComponent implements AfterViewInit, OnDestroy {
private value: number = 0; private value: number = 0;
@ -35,12 +35,13 @@ export class SolarComponent implements AfterViewInit {
} }
option: any = {}; option: any = {};
themeSubscription: any;
constructor(private theme: NbThemeService) { constructor(private theme: NbThemeService) {
} }
ngAfterViewInit() { ngAfterViewInit() {
this.theme.getJsTheme().delay(1).subscribe(config => { this.themeSubscription = this.theme.getJsTheme().delay(1).subscribe(config => {
const solarTheme: any = config.variables.solar; const solarTheme: any = config.variables.solar;
@ -176,4 +177,8 @@ export class SolarComponent implements AfterViewInit {
}); });
}); });
} }
ngOnDestroy() {
this.themeSubscription.unsubscribe();
}
} }

View file

@ -1,4 +1,4 @@
import { Component } from '@angular/core'; import { Component, OnDestroy } from '@angular/core';
import { NbThemeService } from '@nebular/theme'; import { NbThemeService } from '@nebular/theme';
@Component({ @Component({
@ -6,7 +6,7 @@ import { NbThemeService } from '@nebular/theme';
styleUrls: ['./temperature.component.scss'], styleUrls: ['./temperature.component.scss'],
templateUrl: './temperature.component.html', templateUrl: './temperature.component.html',
}) })
export class TemperatureComponent { export class TemperatureComponent implements OnDestroy {
temperature: number = 24; temperature: number = 24;
temperatureOff: boolean = false; temperatureOff: boolean = false;
@ -17,10 +17,15 @@ export class TemperatureComponent {
humidityMode = 'heat'; humidityMode = 'heat';
colors: any; colors: any;
themeSubscription: any;
constructor(private theme: NbThemeService) { constructor(private theme: NbThemeService) {
this.theme.getJsTheme().subscribe(config => { this.themeSubscription = this.theme.getJsTheme().subscribe(config => {
this.colors = config.variables; this.colors = config.variables;
}); });
} }
ngOnDestroy() {
this.themeSubscription.unsubscribe();
}
} }

View file

@ -1,4 +1,4 @@
import { AfterViewInit, Component } from '@angular/core'; import { AfterViewInit, Component, OnDestroy } from '@angular/core';
import { NbThemeService } from '@nebular/theme'; import { NbThemeService } from '@nebular/theme';
declare const echarts: any; declare const echarts: any;
@ -12,17 +12,18 @@ const points = [300, 520, 435, 530, 730, 620, 660, 860];
<div echarts [options]="option" class="echart"></div> <div echarts [options]="option" class="echart"></div>
`, `,
}) })
export class TrafficChartComponent implements AfterViewInit { export class TrafficChartComponent implements AfterViewInit, OnDestroy {
type: string = 'month'; type: string = 'month';
types = ['week', 'month', 'year']; types = ['week', 'month', 'year'];
option: any = {}; option: any = {};
themeSubscription: any;
constructor(private theme: NbThemeService) { constructor(private theme: NbThemeService) {
} }
ngAfterViewInit() { ngAfterViewInit() {
this.theme.getJsTheme().delay(1).subscribe(config => { this.themeSubscription = this.theme.getJsTheme().delay(1).subscribe(config => {
const trafficTheme: any = config.variables.traffic; const trafficTheme: any = config.variables.traffic;
@ -142,4 +143,8 @@ export class TrafficChartComponent implements AfterViewInit {
}); });
}); });
} }
ngOnDestroy() {
this.themeSubscription.unsubscribe();
}
} }

View file

@ -1,4 +1,4 @@
import { Component } from '@angular/core'; import { Component, OnDestroy } from '@angular/core';
import { NbThemeService } from '@nebular/theme'; import { NbThemeService } from '@nebular/theme';
@Component({ @Component({
@ -24,14 +24,19 @@ import { NbThemeService } from '@nebular/theme';
</nb-card> </nb-card>
`, `,
}) })
export class TrafficComponent { export class TrafficComponent implements OnDestroy {
type: string = 'month'; type: string = 'month';
types = ['week', 'month', 'year']; types = ['week', 'month', 'year'];
currentTheme: string; currentTheme: string;
themeSubscription: any;
constructor(private themeService: NbThemeService) { constructor(private themeService: NbThemeService) {
this.themeService.getJsTheme().subscribe(theme => { this.themeSubscription = this.themeService.getJsTheme().subscribe(theme => {
this.currentTheme = theme.name; this.currentTheme = theme.name;
}); });
} }
ngOnDestroy() {
this.themeSubscription.unsubscribe();
}
} }

View file

@ -1,4 +1,4 @@
import { Component } from '@angular/core'; import { Component, OnDestroy } from '@angular/core';
import { NbThemeService } from '@nebular/theme'; import { NbThemeService } from '@nebular/theme';
@Component({ @Component({
@ -13,7 +13,7 @@ import { NbThemeService } from '@nebular/theme';
</nb-card> </nb-card>
`, `,
}) })
export class BubbleMapComponent { export class BubbleMapComponent implements OnDestroy {
latlong: any = {}; latlong: any = {};
mapData: any[]; mapData: any[];
@ -23,10 +23,11 @@ export class BubbleMapComponent {
bubbleTheme: any; bubbleTheme: any;
geoColors: any[]; geoColors: any[];
themeSubscription: any;
constructor(private theme: NbThemeService) { constructor(private theme: NbThemeService) {
this.theme.getJsTheme() this.themeSubscription = this.theme.getJsTheme()
.subscribe(config => { .subscribe(config => {
const colors = config.variables; const colors = config.variables;
@ -525,6 +526,10 @@ export class BubbleMapComponent {
}); });
} }
ngOnDestroy() {
this.themeSubscription.unsubscribe();
}
private getRandomGeoColor() { private getRandomGeoColor() {
const index = Math.round(Math.random() * this.geoColors.length); const index = Math.round(Math.random() * this.geoColors.length);
return this.geoColors[index]; return this.geoColors[index];

View file

@ -1,4 +1,4 @@
import { Component } from '@angular/core'; import { Component, OnDestroy } from '@angular/core';
import { NbThemeService } from '@nebular/theme'; import { NbThemeService } from '@nebular/theme';
@Component({ @Component({
@ -6,13 +6,14 @@ import { NbThemeService } from '@nebular/theme';
styleUrls: ['./hero-buttons.component.scss'], styleUrls: ['./hero-buttons.component.scss'],
templateUrl: './hero-buttons.component.html', templateUrl: './hero-buttons.component.html',
}) })
export class HeroButtonComponent { export class HeroButtonComponent implements OnDestroy {
themeName: string = 'default'; themeName: string = 'default';
settings: Array<any>; settings: Array<any>;
themeSubscription: any;
constructor(private themeService: NbThemeService) { constructor(private themeService: NbThemeService) {
this.themeService.getJsTheme().subscribe(theme => { this.themeSubscription = this.themeService.getJsTheme().subscribe(theme => {
this.themeName = theme.name; this.themeName = theme.name;
this.init(theme.variables); this.init(theme.variables);
}); });
@ -115,4 +116,8 @@ export class HeroButtonComponent {
}, },
}]; }];
} }
ngOnDestroy() {
this.themeSubscription.unsubscribe();
}
} }

View file

@ -1,4 +1,4 @@
import { Component } from '@angular/core'; import { Component, OnDestroy } from '@angular/core';
import { NbThemeService, NbMediaBreakpoint, NbMediaBreakpointsService } from '@nebular/theme'; import { NbThemeService, NbMediaBreakpoint, NbMediaBreakpointsService } from '@nebular/theme';
@Component({ @Component({
@ -6,17 +6,22 @@ import { NbThemeService, NbMediaBreakpoint, NbMediaBreakpointsService } from '@n
styleUrls: ['./typography.component.scss'], styleUrls: ['./typography.component.scss'],
templateUrl: './typography.component.html', templateUrl: './typography.component.html',
}) })
export class TypographyComponent { export class TypographyComponent implements OnDestroy {
breakpoint: NbMediaBreakpoint; breakpoint: NbMediaBreakpoint;
breakpoints: any; breakpoints: any;
themeSubscription: any;
constructor(private themeService: NbThemeService, constructor(private themeService: NbThemeService,
private breakpointService: NbMediaBreakpointsService) { private breakpointService: NbMediaBreakpointsService) {
this.breakpoints = breakpointService.getBreakpointsMap(); this.breakpoints = breakpointService.getBreakpointsMap();
themeService.onMediaQueryChange() this.themeSubscription = themeService.onMediaQueryChange()
.subscribe(([oldValue, newValue]) => { .subscribe(([oldValue, newValue]) => {
this.breakpoint = newValue; this.breakpoint = newValue;
}); });
} }
ngOnDestroy() {
this.themeSubscription.unsubscribe();
}
} }