2016-08-17 4 views
0

Я использую angular2:Как определить завершение подписки на маршрут?

this.route.params.subscribe(params => { 
    //do stuff with params 
}) 

Я смотрел на RxJS docs и говорит, что его можно добавить завершения обратного вызова:

this.route.params.subscribe(params => { 
    // do stuff with params 
}, (err) => { throw err;},() => { 
    console.log('Completed!'); 
}); 

Но это завершение никогда не увольняют. Является ли использование Angular2 Observables отличным от нормы?

ответ

1

Нет ничего особенного в том, как работают наблюдаемые функции ActivatedRoute. Вы правы в том, как определить состояние завершения. Но завершение, вероятно, никогда не произойдет. Обратный вызов завершения будет вызываться, когда Observable выполняет observer.complete(), что происходит, когда есть фиксированный объем данных для отправки (скажем, итерация по массиву или получение ответа от другого источника). Но параметр Observable on route неопределен - предназначен для прослушивания любых изменений параметров, которые могут возникать в течение срока службы компонента (поэтому один и тот же компонент может использоваться для обслуживания различных значений параметров, сохраняющих время, необходимое для генерации компонент). Поскольку эти изменения могут исходить от пользователя или из других частей вашего приложения, Observable длится время жизни компонента, и завершенный обратный вызов не должен возникать. Вот почему вы должны отказаться от подписки на Observable в своем методе ngOnDesctroy() (чтобы предотвратить утечку памяти из-за того, что у вас горячий Наблюдаемый).

+0

Это должен быть комментарий, а не ответ. – dopatraman

+0

Кроме того, завершение происходит из-за того, что корень изменяется ... – dopatraman

+0

@doatraman Я согласен, но я не могу комментировать записи других людей, пока мой представитель не пойдет вверх. –

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

  • Нет связанных вопросов^_^