2017-09-14 6 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 
    }); 
});