2016-10-05 73 views
1

我有一個情況,我在angular2組件中使用異步管道並將可見性傳遞給它。這工作正常。更改訂閱Angular2異步管道

我想要的是後來,當組件仍然'活着',即: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

這不回答。我需要更改組件類中的異步訂閱。這些方法在異步管道類中聲明並運行。 – Francisco

+0

答案的要點是你不需要關心這個,當你做'this.pack = Observable.of(redWolves:Wolf [])'時,框架爲你做這件事。是什麼讓你覺得你需要手動取消訂閱?你是否有與你發佈的代碼有關的問題? – estus

+0

當我這樣做時,我阻止了瀏覽器。我遇到了需要更改組件類中的訂閱的情況。我會詳細說明:我的初始訂閱是SSE事件,但我也對承諾(對服務器)執行回調。儘管SSEvents流可以正常工作,但我希望在調用回調後將管道預訂重置爲promise(數組)的返回。我相信我可能不得不退訂,但我不確定。 – Francisco