У меня есть случай, когда я использую асинхронную трубу в компоненте angle2 и передаю наблюдаемый ей. Это прекрасно работает.Изменить подписку Angular2 Async Pipe
То, что я хочу, позже, в то время как компонент все еще «живой», то есть: OnDestroy не был вызван (следовательно, асинхронный канал подписан), чтобы отказаться от подписки на эту наблюдаемую и подписаться на другую.
Как я могу это достичь?
Вот некоторые псевдо-код, чтобы выставить этот случай:
@Component({
selector: 'pack',
template: `
<wolf *ngFor="let wolf of pack | async">
...
</wolf>
`
})
export class PackComponent implements DoCheck {
pack;
constructor(){
this.pack = Observable.of(northwesthernWolves: Wolf[])
}
onDoCheck() {
if(some condition) {
this.pack = Observable.of(redWolves: Wolf[])
}
}
}
Это не отвечает. Мне нужно изменить асинхронную подписку внутри класса компонента. Эти методы объявляются и выполняются внутри класса async pipe. – Francisco
Пункт ответа заключается в том, что вам не нужно заботиться об этом, рамки делают это для вас, когда вы выполняете 'this.pack = Observable.of (redWolves: Wolf [])'. Что заставило вас думать, что вам нужно отменить подписку вручную? У вас есть проблемы с кодом, который вы опубликовали? – estus
Когда я это делаю, я блокирую браузер. У меня есть случай, когда мне нужно изменить подписку в классе компонента. Я подробно: Моя первоначальная подписка имеет SSE-событие, но я также выполняю обратный вызов по обещанию (оба на сервер). В то время как поток SSEvents работает нормально, я хочу сбросить подписку на канал на возврат обещания (массив) после вызова обратного вызова. Я считаю, что мне, возможно, придется отказаться от подписки, но я не уверен. – Francisco