javascript - 未捕获的类型错误 : Cannot read property '$store' of null

标签 javascript vue.js vuex

我只是编程新手,刚刚试用了 Vue 几天。

这里我想通过以下代码将用户的地理位置数据存储到 Vuex 状态。

    mounted () {
    navigator.geolocation.getCurrentPosition(foundLocation, noLocation)
    function foundLocation (position) {
      var userLoc = {
        Lon: position.coords.longitude,
        Lat: position.coords.latitude
      }
      console.log(userLoc)
      this.$store.dispatch('userLocSave', {lat: userLoc.Lat, lon: userLoc.Lon})
    }
    function noLocation () {
      console.log('No Location found!')
    }
  }

这是 store.js 中的代码 状态

  state: {
    userLat: null,
    userLon: null
  }

突变

userLocation (state, locData) {
  state.userLat = locData.lat
  state.userLon = locData.lon
}

Action

userLocSave ({commit}, locData) {
  commit('userLocation', {
    lat: locData.lat,
    lon: locData.lon
  })
}

然而,它并没有像我想的那样工作,并显示了这个错误。

Uncaught TypeError: Cannot read property '$store' of null
at foundLocation

我试过搜索,但不知道是什么关键字,我已经被这个问题困了一天了。所以,我决定在这里问一下。谢谢

最佳答案

这是范围问题:

this 在上下文中你使用它的范围是你的 function() 而不是 vue 实例。

排序的一种方法是使用 arrow functions .箭头函数维护调用者的作用域,因此在这种情况下,this 仍将作用于 vue 实例。

mounted () {
    navigator.geolocation.getCurrentPosition(
    () => {
        var userLoc = {
            Lon: position.coords.longitude,
            Lat: position.coords.latitude
        }
        console.log(userLoc)
        this.$store.dispatch('userLocSave', {lat: userLoc.Lat, lon: userLoc.Lon})
    }, 
    () => { 
        console.log('No Location found!')
    })
}

关于javascript - 未捕获的类型错误 : Cannot read property '$store' of null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48472221/

相关文章:

vue.js - VueJS 从父组件访问子组件的数据

vue.js - Vuex 正在重置已设置的状态

javascript - 从 Facebook 拉取给定 URL 的共享缩略图

javascript - 解构这个视差的js公式

javascript - Vue 中的 Immer 数据未更新

javascript - 在 Vuejs 中的 v-for 中使用 v-if 显示条件按钮

Vue.js 在 ajax 请求期间禁用组件

javascript - 在选择更改事件时通过 jquery 提交表单

javascript - 如何检查多行单元格是否已填充

javascript - 使用 Vue I18n 和大内容文本 html 的最佳方式