不能从方法访问NavController

我正在尝试在用户使用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'

为什么不在navigationIfUserIsLogdIn()内工作?

请帮助,并提供一个例子:)


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

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未在其中定义)。


尝试做到这一点

     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.
          }
        });
  }
链接地址: http://www.djcxy.com/p/94915.html

上一篇: can't access NavController from method

下一篇: How to reference to outer member