用Vue初始化时刻的正确方法是哪种?

时间:2018-08-08 07:02:24

标签: javascript vuejs2 momentjs vuex

我正在使用Vuex商店,但我认为如果您不使用商店,这个问题仍然适用。

根据Vue文档,在对象上设置多个属性的正确方法是使用Object.assign()并创建一个新对象。

export default {
    state: { 
        eventDateMoment : {}  
    },
    mutations : { 
        initialiseDate(state, payload) {
            state.eventDateMoment = Object.assign({}, state.eventDateMoment, moment(payload.eventDate, 'YYYY-MM-DD'));
        }      
    }
}

据我所知,它仅复制字段。它不会复制方法。那么如何存储包含方法的对象?

我发现了两种似乎可行的方法,但是我不信任它们,因为它们违反了Vue文档中列出的规则。我怀疑它们在所有情况下都应具有响应性。

第一种方法是简单地在mutator中重新分配属性。

mutations : { 
    initialiseDate(state, payload) {
        state.eventDateMoment = moment(payload.eventDate, 'YYYY-MM-DD'));
    }
}

第二种方法是将商店的初始值设置为moment对象,然后使用Object.assign合并新属性,而无需创建新对象。

export default {
    state: { 
        eventDateMoment : moment()  
    },
    mutations : { 
        initialiseDate(state, payload) {
            state.eventDateMoment = Object.assign(state.eventDateMoment, moment(payload.eventDate, 'YYYY-MM-DD'));
        }
    }
}

据我所见,这些都不是可以接受的。那么,用方法存储对象的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

您的第二种方法看起来不错,它可以确保矩型实例的所有主要方法和属性都存在,并在突变中覆盖它们,没关系。 不要过度估计Object.assign方法,建议使用Vue.set方法,如您在此处的文档中所见vuex docs,将初始时刻对象设置为使用{ 1}}的方法。