Ste*_*n-v 5 javascript vue.js vue-component vuex vuejs2
我正在尝试像这样修改一个moment.js驻留在vue.js计算属性中的实例。
computed: {
currentDate() {
return moment();
}
}
Run Code Online (Sandbox Code Playgroud)
每当我尝试用这样的方法调用它时,什么也没有发生:
methods: {
prevMonth() {
this.currentDate = moment(this.currentDate).subtract(1, 'months');
}
}
Run Code Online (Sandbox Code Playgroud)
我猜这是因为计算属性只允许充当 getter(和可选的 setter)。我怎样才能改变这种行为?
我过度简化了这个例子,因为我使用 cmoputed 属性从我的vuex商店获取数据。我不再能够操纵它了。
有什么方法可以currentDate用vuex商店的值填充本地属性,以便我仍然可以操纵它并添加月份等?
我曾想过mounted为此使用该属性,但我只安装我的组件一次。欢迎任何帮助。
如果您的currentDate属性属于您的 Vuex 商店,那么您不应该在组件内操作它。您应该:1) 将 getter 本地映射为计算属性,2) 将突变本地映射为方法。
以下是 Vuex 模块的示例date:
export default {
state: {
currentDate: moment()
},
mutations: {
subtractMonth (state, date) {
state.currentDate = moment(state.currentDate).subtract(1, 'months');
}
},
getters: {
getCurrentDate: (state) => {
return state.currentDate
}
}
}
Run Code Online (Sandbox Code Playgroud)
这就是组件如何使用它,而无需实际“本地”执行任何操作:
import { mapGetters, mapMutations } from 'vuex'
export default {
computed: {
...mapGetters({
currentDate: 'getCurrentDate'
})
},
methods: {
...mapMutations({
prevMonth: 'subtractMonth'
})
}
}
Run Code Online (Sandbox Code Playgroud)
您仍然可以像以前一样currentDate在组件内部进行绑定和调用prevMonth,但现在一切都是通过 Vuex 单一状态完成的。