2016-10-05 2 views
1

У меня есть случай, когда я использую асинхронную трубу в компоненте 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[]) 
     } 
    } 
} 

ответ

3

Учитывая, что структура была выпущена, то можно предположить, что он уже заботится об этом. И на самом деле, it is so:

... 
if (obj !== this._obj) { 
    this._dispose(); 
    return this.transform(obj); 
} 
... 

Когда новый наблюдаемым присвоен класс собственности, старый один отписался автоматически async трубы.

Противоположное поведение приведет к утечке памяти и может считаться ошибкой.

+0

Это не отвечает. Мне нужно изменить асинхронную подписку внутри класса компонента. Эти методы объявляются и выполняются внутри класса async pipe. – Francisco

+0

Пункт ответа заключается в том, что вам не нужно заботиться об этом, рамки делают это для вас, когда вы выполняете 'this.pack = Observable.of (redWolves: Wolf [])'. Что заставило вас думать, что вам нужно отменить подписку вручную? У вас есть проблемы с кодом, который вы опубликовали? – estus

+0

Когда я это делаю, я блокирую браузер. У меня есть случай, когда мне нужно изменить подписку в классе компонента. Я подробно: Моя первоначальная подписка имеет SSE-событие, но я также выполняю обратный вызов по обещанию (оба на сервер). В то время как поток SSEvents работает нормально, я хочу сбросить подписку на канал на возврат обещания (массив) после вызова обратного вызова. Я считаю, что мне, возможно, придется отказаться от подписки, но я не уверен. – Francisco

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