我正在使用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'));
}
}
}
据我所见,这些都不是可以接受的。那么,用方法存储对象的正确方法是什么?
答案 0 :(得分:0)
您的第二种方法看起来不错,它可以确保矩型实例的所有主要方法和属性都存在,并在突变中覆盖它们,没关系。
不要过度估计Object.assign
方法,建议使用Vue.set
方法,如您在此处的文档中所见vuex docs,将初始时刻对象设置为使用{ 1}}的方法。