2016-04-13 28 views
6

Sono nuovo in Angular2 quindi scusami se questa è una domanda banale. Non riesco a interrompere l'intervallo quando faccio clic su un altro link. Questo componente recupera i dati dalla tabella DB ogni 3,5 secondi e viene utilizzato come chat, quindi 100 utenti possono aggiungervi in ​​qualsiasi momento. Non voglio che venga eseguito tutto in background, quindi ho pensato di utilizzare la funzione routeronDeactivate() per bloccarla quando l'utente è su un altro link.Angular2 - stop/cancel/clear osservabile in routerOnDeactivate()

Penso di star facendo qualcosa di sbagliato. Qualcuno mi può aiutare per favore?

export class FeedComponent { 

    public feeditems: Feed[]; 
    public timer; 


    constructor(private _feedService: FeedService) { 
    } 

    getArticlesJSON() { 

     console.log('getArticlesJSON'); 
     this._feedService.getFeedJSON() 
      .subscribe(
       data => this.feeditems = data, 
       err => console.log(err), 
       () => console.log('Completed') 
      ); 
    } 

    routerOnDeactivate() { 

     // this.timer.remove(); 
     // this.timer.dematerialize(); 
     // clearInterval(this.timer); 

     console.log('-- deactivate '); 
     // console.log('-- deactivate ' + JSON.stringify(this.timer)); 
    } 

    routerOnActivate() { 

     this.timer = Observable.timer(5000,3500); 
     this.timer.subscribe(() => { 
      this.getArticlesJSON(); 
     }); 

     console.log('++ activate ' + JSON.stringify(this.timer)); 
    } 
} 

risposta

19
routerOnActivate() { 
    this.timer = Observable.timer(5000,3500); 
    this.subscription = this.timer.subscribe(() => { 
    this.getArticlesJSON(); 
    }); 
} 

routerOnDeactivate() { 
    this.subscription.unsubscribe(); 
} 
+0

Vuol dire che il timer di reset unsubscribe a zero? – Daniel

+1

Non so cosa intendi con "a zero". Significa che Observable non chiama '() => {this.getArticlesJSON();}' più. –

+0

In genere, quando si annulla l'iscrizione, il timer si azzera o si annulla? Devo resettare il contatore del timer dopo? – Daniel

Problemi correlati