2016-04-13 2 views
6

Ich bin neu in Angular2 so entschuldigt, wenn dies eine triviale Frage ist. Ich kann das Intervall nicht stoppen, wenn ich auf einen anderen Link klicke. Diese Komponente ruft alle 3,5 Sekunden Daten aus der DB-Tabelle ab und sie wird als Chat verwendet, so dass 100 Benutzer sie jederzeit hinzufügen können. Ich möchte nicht, dass dies die ganze Zeit im Hintergrund läuft, also dachte ich, ich nutze die Funktion routeronDeactivate(), damit es aufhört, wenn sich der Benutzer auf einem anderen Link befindet.Angular2 - stoppen/abbrechen/klar beobachtbar in routerOnDeactivate()

Ich denke, ich mache etwas falsch. Kann mir bitte jemand helfen?

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)); 
    } 
} 

Antwort

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

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

Bedeutet es, dass Abmelde-Reset-Timer auf Null? – Daniel

+1

Ich weiß nicht, was du mit "zu Null" meinst. Das bedeutet, dass das Observable nicht mehr '() => {this.getArticlesJSON();}' aufruft. –

+0

Im allgemeinen Fall, wenn wir uns abmelden, wird der Timer auf Null oder auf Null gesetzt? Brauche ich den Timer nach dem Reset? – Daniel

Verwandte Themen