1- import { Component , Input , OnInit , ViewChild , ViewEncapsulation } from '@angular/core' ;
1+ import { Component , Input , OnDestroy , OnInit , ViewChild , ViewEncapsulation } from '@angular/core' ;
22
33import { Subject } from 'rxjs' ;
4- import { first } from 'rxjs/operators' ;
4+ import { first , takeWhile } from 'rxjs/operators' ;
55
66import { NgxTinySliderService } from './ngx-tiny-slider.service' ;
77import { NgxTinySliderSettingsInterface } from './interfaces/ngx-tiny-slider-settings.interface' ;
@@ -12,18 +12,23 @@ import {NgxTinySliderSettingsInterface} from './interfaces/ngx-tiny-slider-setti
1212 styleUrls : [ 'ngx-tiny-slider.component.scss' ] ,
1313 encapsulation : ViewEncapsulation . None
1414} )
15- export class NgxTinySliderComponent implements OnInit {
15+ export class NgxTinySliderComponent implements OnInit , OnDestroy {
1616 @Input ( ) config : NgxTinySliderSettingsInterface ;
1717 @ViewChild ( 'slideItems' ) slideItemsContainerRef ;
1818
19+ private sliderInstance ;
20+ private aliveObservable = true ;
21+
1922 public domReady = new Subject ( ) ;
2023 private defaultConfig = this . ngxTinySliderService . getDefaultConfig ( ) ;
2124
2225 constructor ( private ngxTinySliderService : NgxTinySliderService ) {
2326 }
2427
2528 ngOnInit ( ) {
26- this . extendConfig ( ) ;
29+ if ( this . config ) {
30+ this . extendConfig ( ) ;
31+ }
2732
2833 if ( this . config . waiteForDom ) {
2934 this . listenForDomReady ( ) ;
@@ -32,19 +37,30 @@ export class NgxTinySliderComponent implements OnInit {
3237 }
3338 }
3439
40+ ngOnDestroy ( ) {
41+ if ( this . config . waiteForDom ) {
42+ this . aliveObservable = false ;
43+ }
44+
45+ if ( this . sliderInstance && this . sliderInstance . destroy ) {
46+ this . sliderInstance . destroy ( ) ;
47+ }
48+ }
49+
3550 private listenForDomReady ( ) {
3651 this . domReady
37- . pipe ( first ( ) )
38- . subscribe ( ( ) => {
39- this . initSlider ( ) ;
40- } ) ;
52+ . pipe (
53+ first ( ) ,
54+ takeWhile ( ( ) => this . aliveObservable )
55+ )
56+ . subscribe ( ( ) => this . initSlider ( ) ) ;
4157 }
4258
4359 private extendConfig ( ) {
4460 Object . keys ( this . config ) . forEach ( i => this . defaultConfig [ i ] = this . config [ i ] ) ;
4561 }
4662
4763 private initSlider ( ) {
48- this . ngxTinySliderService . initSlider ( this . defaultConfig , this . slideItemsContainerRef ) ;
64+ this . sliderInstance = this . ngxTinySliderService . initSlider ( this . defaultConfig , this . slideItemsContainerRef ) ;
4965 }
5066}
0 commit comments