数据变量没有从Vue.js中的监视器上的计算属性更新
data variable not being updated from watcher on computed property in Vue.js with Vuex
小提琴:https://jsfiddle.net/mjvu6bn7/
我在计算属性上有一个监视器,它依赖于Vuex存储变量,该变量正在异步设置。我试图设置Vue组件的数据变量,当这个计算属性发生变化时,但这并没有发生。
这里是Vue组件:
new Vue({
el: '#app',
store,
data : {
myVar : ""
},
beforeMount() {
this.$store.dispatch('FETCH_PETS', {
}).then(() => {
console.log("fetched pets")
})
},
computed:{
pets(){
return this.$store.state.pets
}
},
watch:{
pets: (pets) => {
console.log("Inside watcher")
this.myVar = "Hey"
}
}
});
这里是Vuex商店:
const state = {
pets: []
};
const mutations = {
SET_PETS (state, response) {
console.log("SET_PETS")
state.pets = response;
}
};
const actions = {
FETCH_PETS: (state) => {
setTimeout(function() {
state.commit('SET_PETS', ['t7m12qbvb/apple_9', '6pat9znxz/1448127928_kiwi'])
}, 1000)
}
}
const store = new Vuex.Store({
state,
mutations,
actions
});
这是为此创建的小提琴。正如你所看到的,myVar并没有被更新,但是当宠物被加载时,watcher会被调用。
您忽略了ES6箭头函数不绑定this
关键字的事实(箭头函数不只是普通function
的语法糖)。因此,在您的示例中,pets
监视程序中的this
默认为window
,而Vue实例上的myVar
从未设置。如果按照下面的方式修改代码,就可以正常工作了:
watch: {
pets(pets) {
console.log("Inside watcher")
this.myVar = "Hey"
}
}
这是因为这不是您期望的内部函数。
试试这个:
watch:{
var that = this;
pets: (pets) => {
console.log("Inside watcher")
that.myVar = "Hey"
}
相关文章:
- 根据元素和容器大小计算边距
- 从Rally获取一个特定的标记,以便计算另一个字段中的值
- 使用D3.js计算带有字母间距的文本长度
- 使用CSS或JavaScript计算分页符的数量
- 可以't计算自定义谷歌地图的js
- 如何计算每个元素's的高度,并将这些值用作函数中的变量
- JavaScript计算帮助(乘以时间)
- 如何计算对象文字中的键
- JavaScript循环无法正确计算/显示结果
- 与域在同一台计算机上运行的NODEJS服务器的CORS错误
- 四舍五入JavaScript计算
- 计算HTML中的页数
- 使用jQuery计算数组中的对象以更改进度条
- 如何在jquery中使用实时计算求和值
- 计算多个项目的价格
- 计算CSS3缩放框在另一个框中的最高位置
- 如何计算二十面体的法线
- if(foo!==null)的计算结果为true,即使foo为null
- 在Angular中重新使用HTML端的计算文本
- 数据变量没有从Vue.js中的监视器上的计算属性更新