2017-05-10 17 views
1

次のコードでログアウトを実装しようとするとTypeError: undefined is not an object (evaluating 'this.logOut')が表示されます。私はまた、私が現在logOut関数と呼んでいる場所の内部にlogOut関数の内容を入れようとしましたが、同じようになっていますthisエラー。ユーザがログインしていない場合、ログインにリダイレクトする -

export class ContactPage { 

    user: any; 

    constructor(public navCtrl: NavController, public authData: AuthData) { 

    } 

    ionViewWillEnter() { 
    firebase.auth().onAuthStateChanged(function(user) { 
     if (!user) { 
     console.log("user is not logged in"); 
     this.logOut(); 
     } else { 
     console.log("user is logged in"); 
     return; 
     }  
    }); 
    } 

    logOut() { 
    this.authData.logoutUser().then(() => { 
     this.navCtrl.setRoot(Login); 
    }); 
    } 

} 

答えて

1

あなたの問題はthisは、(異なるスコープによる)あなたのコールバックで異なることです。スコープを修正するには、コンストラクタで関数をバインドします。

constructor(public navCtrl: NavController, public authData: AuthData) { 
    // This line says that every time onAuthCallback is called, the 
    // value of 'this' in the function is the same as what it is here. 
    this.onAuthCallback = this.onAuthCallback.bind(this); 
} 

onAuthCallback(user) { 
    if (!user) { 
     console.log("user is not logged in"); 
     this.logOut(); 
    } else { 
     console.log("user is logged in"); 
     return; 
    }  
} 

ionViewWillEnter() { 
    // When the callback is triggered, it will have the 
    // proper value for 'this'. 
    firebase.auth().onAuthStateChanged(this.onAuthCallback); 
} 
関連する問題