为什么我不能在firebase'''回调中访问vuejs'this'?

时间:2018-01-03 15:13:02

标签: firebase vuejs2 firebase-authentication vue-router

我正在尝试使用firebase向我的vuejs应用程序添加身份验证。 注销用户后,应将用户发送回登录页面。我在HelloWorld.vue文件的脚本中实现了以下代码:

import firebase from 'firebase'

  export default {
    name: 'HelloWorld',
    data () {
      return {
        msg: 'Welcome to Your Vue.js App'
      }
    },
    methods: {
      logout () {
        firebase.auth().signOut().then(function () {
          this.$router.push('login')
        })
      }
    }
  }

但是我从我的vuejs dev工具中得到以下错误:

TypeError: this is undefined
[Learn More]
app.js%20line%201954%20%3E%20eval:40:9
logout/<
HelloWorld.vue:37
Pb/e.a</e.g<
auth.js:23
Yb
auth.js:26
Ub
auth.js:26
h.Qb
auth.js:25
Cb
auth.js:19

引用firebase回调中的this对象

即可。$ router.push( '登录')

我需要帮助来弄清楚为什么我不能在回调中访问它,我该如何解决问题。提前谢谢。

2 个答案:

答案 0 :(得分:6)

您可以使用arrow function来解决此问题,因为this在另一个函数中没有作用于vue实例。

methods: {
  logout () {
    firebase.auth().signOut().then(() => { // arrow syntax
      this.$router.push('login')
    })
  }
}

我个人更喜欢这个,因为它保存了另一个变量声明。

另一种方法是使用bind(this)

methods: {
  logout () {
    firebase.auth().signOut().then(function () { 
      this.$router.push('login')
    }.bind(this)) // bind added.
  }
}

答案 1 :(得分:0)

在一个功能中,&#39;这个&#39;绑定到函数本身而不是vue实例。解决方法:

methods: {
  logout () {
    const that = this      \\ the ES5 var is also possible
    firebase.auth().signOut().then(function () {
      that.$router.push('login')
    })
  }
}