Vue.js 修改计算属性?

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商店获取数据。我不再能够操纵它了。

有什么方法可以currentDatevuex商店的值填充本地属性,以便我仍然可以操纵它并添加月份等?

我曾想过mounted为此使用该属性,但我只安装我的组件一次。欢迎任何帮助。

Tom*_*ler 3

如果您的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 单一状态完成的。