2017-09-14 139 views
0

我为我的Angular 4表单创建了一个canDeactivate处理程序。虽然这有效,但我担心我会导致内存泄漏(缺少更好的术语)。我读到您必须退订才能避免订阅量不断增加;但我不确定在哪里/如何取消订阅我在下面创建的订阅。 observer.complete呼叫是否删除订阅?在观察者中删除订阅

// Allow the user to navigate away from this page 
    public canDeactivate(): Observable<boolean> { 

    // Popup a prompt dialog 
    const title = 'Lose Changes'; 
    const prompt = 'Are you sure you want to lose your changes?'; 
    this.dialogWindow.show(EDialogTypes.EDialogYesNo, EDialogStyles.EDialogStyleWarning, title, prompt); 

    return Observable.create(observer => { 
     this.dialogWindow.observable.subscribe(buttonPressed => { 
     const proceed = (buttonPressed === EButtonPressed.EButtonPressedYes); 
     console.log('Allow proceed: ' + proceed); 
     observer.next(proceed); 
     observer.complete(); 
     }); 
    }); 
    } 

回答

0

您可以将订阅保存到变量并在获取所需内容后使用它来取消订阅。就像这样:

return Observable.create(observer => { 
    let subscription = this.dialogWindow.observable.subscribe(buttonPressed => { 
    const proceed = (buttonPressed === EButtonPressed.EButtonPressedYes); 
    console.log('Allow proceed: ' + proceed); 
    observer.next(proceed); 
    observer.complete() 
    subscription.unsubscribe(); // here you unsubscribe 
    }); 
});