2017-06-01 4 views
1

ユーザーがangularfireで認証された後、別のページにナビゲートしようとしています。他のページに移動する以外はすべて動作します。ここでIonic 2 Angular 2 - 方法からNavControllerにアクセスできない

は私のコードです:

constructor(public navCtrl: NavController, public menu: MenuController, public afAuth: AngularFireAuth, public db: AngularFireDatabase, private platform : Platform) { 
    this.navigateIfUserIsLogdIn(); 
    } 

    navigateIfUserIsLogdIn(){ 
     this.authState = this.afAuth.authState; 
     this.user = this.afAuth.auth.currentUser; 

     this.afAuth.auth.onAuthStateChanged(function(user) { 
      if (user) { 
      // User is signed in. 
      this.navCtrl.setRoot(HomePage); 
      } else { 
      // No user is signed in. 
      } 
     }); 
    } 

私が手にエラーがある:

エラー:キャッチされない(約束で):TypeError例外:プロパティを読み取ることができません未定義

の 'navCtrl'

なぜnavigateIfUserIsLogdIn()内で動作しないのですか?

役立つ、と例を提供:)

 constructor(public navCtrl: NavController, public menu: MenuController, public afAuth: AngularFireAuth, public db: AngularFireDatabase, private platform : Platform) { 
    this.navigateIfUserIsLogdIn(); 
    } 

    navigateIfUserIsLogdIn(){ 
     this.authState = this.afAuth.authState; 
     this.user = this.afAuth.auth.currentUser; 
     var that= this; 
     this.afAuth.auth.onAuthStateChanged(function(user) { 
      if (user) { 
      // User is signed in. 
      that.navCtrl.setRoot(HomePage); 
      } else { 
      // No user is signed in. 
      } 
     }); 
    } 
+0

ネストされた関数内の[Javascript "this"ポインタ]の可能な複製(https://stackoverflow.com/questions/9644044/javascript-this-pointer-within-nested-function) –

答えて

1

あなたはこのように矢印の機能を使用する必要があることを行うには

+1

Greate answer!ありがとうございました! :) – Christer

+0

喜んで:) – sebaferreras

-2

試してください。今、私たちは

を行う

navigateIfUserIsLogdIn(){ 
    this.authState = this.afAuth.authState; 
    this.user = this.afAuth.auth.currentUser; 

    this.afAuth.auth.onAuthStateChanged((user) => { 
     if (user) { 
     // User is signed in. 
     this.navCtrl.setRoot(HomePage); 
     } else { 
     // No user is signed in. 
     } 
    }); 
} 

お知らせ

this.afAuth.auth.onAuthStateChanged((user) => {...});

代わり矢印関数を使用して

this.afAuth.auth.onAuthStateChanged(function(user) {

の、thisプロパティが上書きされず、依然として内部機能にコンポーネントインスタンス(そうでなければ、thisキーワードポイントを参照し、navCtrlが定義されていませんそれ)。

+1

少なくとも理由を説明し、指摘してください'=>'を使うオプション。本当に、これは重複しています –

関連する問題