javascript - VueJS - 如何从方法内的函数更新组件数据?

标签 javascript firebase vue.js firebase-realtime-database vuejs2

我正在尝试使用 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 获得的响应来更新组件数据中的“列表”。尝试了 this.listing 但没有成功。我怎样才能做到这一点?

最佳答案

您应该将 this (组件实例)分配给全局变量 vm,然后在回调中将 snapshot.val() 分配给listing 数据属性如下:

 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()

      })
    }

或将回调用作箭头函数(snapshot)=>{}:

 search () {
      console.log(this.searchData.keyword)
      listingsRef.orderByChild('location').equalTo(this.searchData.keyword).on('value',  (snapshot)=>{
        console.log(snapshot.val())

          this.listings= snapshot.val()

      })
    }

关于javascript - VueJS - 如何从方法内的函数更新组件数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61324085/

相关文章:

javascript - 如何从注册电子邮件中获取 Firebase 中的 "name"数据

ios - 来自 Firebase 的数据未加载到数组中

javascript - 在数组中查找对象值 Vue Javascript Vuex?

javascript - 如何访问 `<div>` 标签内的 `<p>` 标签?

javascript - 如何在 clojure Hiccup 中嵌入 javascript?

javascript - 错误 : undefined is not an object (evaluating 'ProfileService.getProfile(1).then' )

javascript - 类型错误 : Cannot read property 'getters' of undefined @vue/test-utils

javascript - 弹出窗口内的空 DOM

android - Firebase Auth : Requests from this Android client application com. xxx 被阻止

vue.js - 单击其中的按钮时阻止路由器链接 : VUEJS