通过Vue计算调用Vue方法的问题

时间:2017-07-27 18:32:54

标签: javascript vue.js vuejs2

我认为这个问题与JS有关,而不是VueJS。但我有以下Vue方法返回Firebase调用并返回要求的对象。这是有效的:

methods: {
  getSponsor (key) {
    db.ref('businesses').child(key).on('value', snap => {
      console.log(snap.val())
      return snap.val()
    })
  }
}
  

[对象]

现在,当我从计算属性调用此方法时,它会生成undefined

computed: {
  sponsor () {
    console.log(this.getSponsor(key))
    return(this.getSponsor(key))
  }
}
  

未定义

这是为什么?是因为我如何归还我的方法?

1 个答案:

答案 0 :(得分:1)

当您调用异步操作时,您将从函数上下文中退出,这意味着您无法从将在main函数中返回的回调函数返回一个值。

您的问题的解决方案是从回调函数中设置data中的属性(首先声明它),然后在您的计算属性中获取该属性的值。

 computed: {
    sponsor () {
        return(this.sponsor)
    }
 }
 methods: {
  getSponsor (key) {
    let self = this;
    db.ref('businesses').child(key).on('value', snap => {
      console.log(snap.val())
      self.sponsor =  snap.val()
    })
  }
 }

如果您将调用计算属性中的getSonsor,它将在initilaztion过程中运行两次,在sponsor属性更改时运行一次。

因为您只需要在我猜或事件上运行它就可以在beforCreate / mounted等处执行..取决于您的需求