Ionic 2 Angular 2 - 无法从方法访问NavController

时间:2017-06-01 21:37:37

标签: javascript ionic2 ionic3 lexical-scope

用户通过angularfire进行身份验证后,我尝试导航到另一个页面。除了导航到另一个页面外,一切正常。

这是我的代码:

  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()时它不会工作?

请帮助,并提供示例:)

2 个答案:

答案 0 :(得分:2)

你需要使用这样的箭头函数:

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

请注意,现在我们

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

而不是

this

通过使用箭头函数, this属性不会被覆盖,仍会引用组件实例(否则,navCtrl关键字指向内部函数,{{ 1}}未在其中定义。)

答案 1 :(得分:-2)

尝试这样做

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