在具有多个嵌套对象的对象中使用Vue.set

时间:2018-05-02 11:44:09

标签: javascript vue.js ecmascript-6 vuejs2

我正在尝试使用Vue.set()更新Vue 2中的状态对象。

这就是对象的样子:

state: {
    entries: [
        // entry 1
        fields: {
            someProperties : ''
            // here I would like to add another property named 'googleInfos'
        }
    ], [
        // entry 2
        fields: {
            someProperties : ''
            // here I would like to add another property named 'googleInfos'

        }
    ]
}

到目前为止,我正在使用此突变进行更新。我正在分别改变每个条目,因为它们有不同的内容。

ADD_GOOGLE_INFOS (state, {index, infos}) {
    state.entries[index].fields.googleInfos = infos
}

现在,我正在尝试实施Vue.set()以避免change detection caveat

我的问题是我找不到合适的方法来添加它。

以下是Vue.set()应该如何工作:

Vue.set(state.object, key, value)

所以我试过这个,这似乎不起作用,因为state.entries[index]不是第一等级的对象:

Vue.set(state.entries[index], 'fields.googleInfos', infos)

但这也不起作用:

Vue.set(state.entries, '[index].fields.googleInfos', infos)

任何人都知道我做错了什么?

1 个答案:

答案 0 :(得分:9)

唯一的非反应性部分是您尝试在fields对象中添加的新属性。

要添加googleInfos属性,您必须将其设置为如下突变:

ADD_GOOGLE_INFOS (state, {index, infos}) {
    Vue.set(state.entries[index].fields, 'googleInfos', infos);
}