2016-10-19 3 views
2

Эй, я попробовал, что следующий кусок кода:Angular2 Получение Params маршрут с обещаниями

constructor(private _route: ActivatedRoute) {} 

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

Однако это не делает anyhting. Если я поменяю toPromise().then на subscribe, он отлично работает. Любая идея, почему это не сработает? Я использовал toPromise().then во многих других местах моего проекта, и он работает отлично.

ответ

5

_route.params испускает несколько событий. Когда изменение маршрута изменяет только значение параметра маршрута, то компонент не воссоздается маршрутизатором, а вместо этого генерируется только другое значение params.

Поэтому использование toPromise(), вероятно, не очень хорошая идея, но это возможно, например, с помощью first() так, что наблюдаемые завершается после первого события и, следовательно, также обещание, возвращенного toPromise() завершается.

Без .first() обещание завершается, когда вы переходите от маршрута (не проверено).

constructor(private _route: ActivatedRoute) {} 

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

first необходимо импортировать.

Смежные вопросы