2016-10-19 6 views
2

Hey Ich habe versucht, das folgende Stück Code:Angular2 Erste Route params mit dem Versprechen

constructor(private _route: ActivatedRoute) {} 

ngOnInit() { 
    this._route.params.toPromise().then(data => { 
    ... 
    }) 
} 

jedoch nicht anyhting macht. Wenn ich toPromise().then durch subscribe vertausche, funktioniert es gut. Irgendeine Idee, warum es nicht funktionieren würde? Ich habe toPromise().then in vielen anderen Orten in meinem Projekt verwendet und es funktioniert gut.

Antwort

5

_route.params gibt mehr als ein Ereignis aus. Wenn eine Routenänderung nur den Parameterwert einer Route ändert, wird die Komponente nicht vom Router neu erstellt, sondern nur ein anderer Wert ausgegeben.

Daher toPromise() verwendet, ist wahrscheinlich keine gute Idee, aber es ist möglich, zum Beispiel first() so dass die beobachtbaren abgeschlossen ist nach dem ersten Ereignis mit und damit auch die von toPromise() vervollständigt zurück Versprechen.

Ohne .first() ist das Versprechen abgeschlossen, wenn Sie die Route verlassen (nicht verifiziert).

constructor(private _route: ActivatedRoute) {} 

ngOnInit() { 
    this._route.params.first().toPromise().then(data => { 
    ... 
    }) 
} 

first muss importiert werden.