如何正确使用NavController组件

时间:2017-09-20 19:20:46

标签: angular typescript firebase firebase-realtime-database ionic3

我需要这样做:

  async doLogin(user: User) {
    try {
      const result = await this.AngularFireAuth.auth.signInWithEmailAndPassword(user.email, user.password);
      if (result) {
        this.AngularFireAuth.authState.subscribe(user => {
          if (user) {
            var ref = firebase.database().ref(`profile/${user.uid}`);
            ref.once("value")
              .then(function(snapshot) {
                var key = snapshot.key;
                if (user.uid === key) {
                  this.navCtrl.setRoot(HomePage);
                }
                else {
                  this.navCtrl.setRoot(ProfilePage);
                }
              });
          }
        });
      }
    }
    catch (error) {
      let toast = this.toastCtrl.create({
        message: this.loginErrorString,
        duration: 3000,
        position: 'top'
      });
      toast.present();
    }
  }

但是我收到了这个错误:TypeError: Cannot read property 'navCtrl' of undefined

我不知道为什么会这样做,但我认为方法doLogin无法读取模块navCtrl。 navCtrl方法显然被添加到构造中。

最好的问候朋友

1 个答案:

答案 0 :(得分:1)

首先,尝试使用箭头函数(snapshot) => {...}而不是常规function(snapshot) {...}。在您的情况下,您使用的是this关键字,因此旧功能存在许多问题,这些问题已在新的ES6箭头功能中得到解决!

有关箭头功能和this的更多信息:https://hackernoon.com/javascript-es6-arrow-functions-and-lexical-this-f2a3e2a5e8c4