【发布时间】:2021-09-10 23:42:42
【问题描述】:
我遇到了一个问题,我的组件中有一些模板 HTML,它依赖于 Vuex 方法的 computed getter。正如您在模板中看到的那样,我只是试图在带有{{ getNumSets }} 的<p> 标记中显示计算属性的输出。
当我使用 UPDATE_EXERCISE_SETS 突变更新状态时,我可以在 Vue devtools 中看到状态已正确更新,但更改未反映在 <p> {{ getNumSets }} </p> 部分中。
模板 HTML:
<template>
...
<v-text-field
v-model="getNumSets"
placeholder="S"
type="number"
outlined
dense
></v-text-field>
<p>{{ getNumSets }}</p>
...
</template>
组件逻辑:
<script>
...
computed: {
getNumSets: {
get() {
var numSets = this.$store.getters['designer/getNumSetsForExercise']({id: this.id, parent: this.parent})
return numSets
},
set(value) { // This correctly updates the state as seen in the Vue DevTools
this.$store.commit('designer/UPDATE_EXERCISE_SETS', {
id: this.exerciseId,
parentName: this.parent,
numSets: parseInt(value),
date: this.date
})
}
}
...
</script>
Vuex 存储逻辑:
...
state: {
designerBucket: []
},
getters: {
getNumSetsForExercise: (state) => (payload) => {
var numSets = 0
for (var i = 0; i < state.designerBucket.length; i++) {
if (state.designerBucket[i].id == payload.id) {
numSets = state.designerBucket[i].numSets
}
}
return numSets
}
},
mutations: {
UPDATE_EXERCISE_SETS(state, payload) {
state.designerBucket.forEach(exercise => {
if (exercise.id == payload.id) {
exercise.numSets = payload.numSets
}
})
}
}
非常感谢任何见解!
附:我还尝试使用for (var i=0...) 循环,遍历索引,然后使用Vue.set() 设置值。这确实也更新了 store 中的值,但计算的属性仍然没有更新模板。
【问题讨论】:
-
在您的 Vuex getter 中,您是否尝试使用该语法将参数传递给 getter? Getters don't take arguments.
-
@zcoop98 我实际上忘记在问题中输入正确的参数,但我对其进行了编辑以反映它的实际外观。对不起!
标签: javascript vue.js vuetify.js vuex