Javascript VueJS-如何从方法中的函数更新组件数据?
我正在尝试使用Firebase进行搜索。我的VueJS代码中有这个Javascript VueJS-如何从方法中的函数更新组件数据?,javascript,firebase,vue.js,firebase-realtime-database,vuejs2,Javascript,Firebase,Vue.js,Firebase Realtime Database,Vuejs2,我正在尝试使用Firebase进行搜索。我的VueJS代码中有这个 export default { data () { return { listings: [], searchData: { keyword: "" } } }, name: 'SearchScreen', components: { ValidationProvider, ValidationObserver }, f
export default {
data () {
return {
listings: [],
searchData: {
keyword: ""
}
}
},
name: 'SearchScreen',
components: {
ValidationProvider,
ValidationObserver
},
firebase: {
listings: listingsRef
},
methods: {
search () {
console.log(this.searchData.keyword)
listingsRef.orderByChild('location').equalTo(this.searchData.keyword).on('value', function (snapshot){
console.log(snapshot.val())
return{
listings: snapshot.val()
}
})
}
}
}
现在,当我执行
console.log时,它成功地过滤出数据并在控制台中显示响应。但我无法用Firebase提供的响应更新组件数据中的“列表”。尝试了此操作。正在列出,但无效。如何执行此操作?您应该将此
(组件实例)分配给一个全局变量vm
,然后在回调中将该snapshot.val()
分配给列表
数据属性,如下所示:
search () {
console.log(this.searchData.keyword)
let vm =this;
listingsRef.orderByChild('location').equalTo(this.searchData.keyword).on('value', function (snapshot){
console.log(snapshot.val())
vm.listings= snapshot.val()
})
}
或者将回调函数用作箭头函数(快照)=>{}
:
search () {
console.log(this.searchData.keyword)
listingsRef.orderByChild('location').equalTo(this.searchData.keyword).on('value', (snapshot)=>{
console.log(snapshot.val())
this.listings= snapshot.val()
})
}
向搜索函数添加对组件的引用
thisComponent = this
然后在函数内部(快照)
一种方法是将此
绑定到函数:
listingsRef.orderByChild('location').equalTo(this.searchData.keyword).on('value', function (snapshot){
this.listings = snapshot.val()
}.bind(this))
Ref:console.log(snapshot.val())返回的是什么?数组还是对象?@palash它是一个对象数组,是控制台。在开始和内部搜索()
中记录(这个)
。在('value',函数(快照){…
?请在你的主要帖子中发布图像。@palaѕ我解决了它。(快照)=>{}
完成了工作。ThanksI尝试过,但它说无法设置null
的null
或未定义的的属性'listings'。您添加了让vm=this;
?@SuvinNimnakaSukka这是不可能的,因为vm
这里指的是vue实例。@Boussadjranull
。是的,我添加了这个too@pala你要做什么你的意思是?不起作用:(但是@Boussadjra给出了一个带有箭头函数的解决方案,它起作用了。谢谢!很高兴知道!:)别忘了投票@Boussadjra的答案,并接受它作为你问题的正确答案。
listingsRef.orderByChild('location').equalTo(this.searchData.keyword).on('value', function (snapshot){
this.listings = snapshot.val()
}.bind(this))