Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript VueJS-如何从方法中的函数更新组件数据?_Javascript_Firebase_Vue.js_Firebase Realtime Database_Vuejs2 - Fatal编程技术网

Javascript 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

我正在尝试使用Firebase进行搜索。我的VueJS代码中有这个

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实例。@Boussadjra
null
。是的,我添加了这个too@pala你要做什么你的意思是?不起作用:(但是@Boussadjra给出了一个带有箭头函数的解决方案,它起作用了。谢谢!很高兴知道!:)别忘了投票@Boussadjra的答案,并接受它作为你问题的正确答案。
listingsRef.orderByChild('location').equalTo(this.searchData.keyword).on('value', function (snapshot){
    this.listings = snapshot.val()
}.bind(this))