我认为这个问题与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))
}
}
未定义
这是为什么?是因为我如何归还我的方法?
答案 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
等处执行..取决于您的需求