2017-01-29 8 views
1

I次のコードを持っている:私がいる約束コールバックでこれを使用して

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

:私はngZone.runthis.successMessage割り当てをラップすることによってこれを解決しましたか?あなたのコードは値を読み取ることはありません。あなたは[mcve]が*完全*であることを確認する必要があります。 – Quentin

+0

これはテンプレートに 'successMessage'と表示されている、それが起こっていないAngular2アプリです。そして、はい、私は 'then'の外にメッセージを設定すれば、正しく動作することを確認しました。私はこの情報でオリジナルの投稿を更新します。 –

+1

@EvanSalterは、設定されていない値ではなく、非同期のアクションの後に角型アプリケーションが更新に失敗している可能性がありますか? 'console.log(this)'を実行しても 'undefined'が出るのでしょうか、それともsuccessMessageが実際に設定されていることを示していますか? – m0meni

答えて

1

@ AR7のおかげで、私は解決策を見つけました。 this.successMessageは正しく更新されましたが、Angular2テンプレートは更新されていませんでした。どのようにあなたが言うことができる - 「私がいる問題はthis.successMessageが成功した場合に設定されていないことである」

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); 
      } 
     ) 
    }); 

} 
関連する問題