2017-01-29 1 views
1

나는 다음과 같은 코드를 가지고 : 나는 데약속 콜백이 사용

private resetPassword() { 

    this.auth.subscribe(auth => { 
     this.firebaseRef.auth().sendPasswordResetEmail(auth.auth.email).then(
      success => { 
       this.successMessage = 'A password reset email was sent to ' + auth.auth.email + '. Please follow' + 
        'the instructions in the email to reset your password.'; 
      }, 
      error => { 
       console.log(error); 
      } 
     ) 
    }); 

} 

문제는 this.successMessage이 성공에 설정되어 있지 않은지입니다. console.log을 넣을 수는 있지만 작동 범위는 this입니다. 내가 할 수있는 한 어디서나 .bind(this)을 사용해 보았지만 도움이되지 못했습니다. 이견있는 사람?

이것은 Angular2 앱이며 템플릿에 successMessage이 렌더링되어 있으므로 어떻게 작동하는지 알 수 있습니다. then 외부 메시지를 설정하면 정상적으로 작동하는지 확인했습니다.

+0

"나는 데 문제가 this.successMessage 성공에 설정되지 않는 것입니다"나는 ngZone.runthis.successMessage 할당을 포장하여이를 해결? 코드가 값을 다시 읽지 않습니다. [mcve]가 * 완료되었는지 확인해야합니다. – Quentin

+0

이것은 템플릿에'successMessage'를 표시하고 일어나지 않는 Angular2 앱입니다. 그리고 네, 나는 그 메시지가 '다음'의 외부에 설정되면 제대로 작동한다는 것을 확인했습니다. 나는이 정보로 내 원래 게시물을 업데이 트됩니다. –

+1

@EvanSalter는 값이 설정되지 않고 비동기 동작 후에 각도 응용 프로그램이 업데이트되지 않을 수 있습니다. 'console.log (this)'를'undefined'라고 출력하거나 실제로 successMessage가 설정되었음을 보여 줍니까? – m0meni

답변

1

@ AR7 덕분에 해결책을 찾아 냈습니다. this.successMessage이 제대로 업데이트되었지만 Angular2 템플릿이 업데이트되지 않았습니다. 어떻게 말할 수 -

constructor(private ngZone: NgZone) {} 
... 
private resetPassword() { 

    this.auth.subscribe(auth => { 
     this.firebaseRef.auth().sendPasswordResetEmail(auth.auth.email).then(
      success => { 
       this.ngZone.run(() => { 
        this.successMessage = 'A password reset email was sent to ' + auth.auth.email + '. Please follow' + 
         'the instructions in the email to reset your password.'; 
       }); 
       console.log(this); 
      }, 
      error => { 
       console.log(error); 
      } 
     ) 
    }); 

}