setChildTypeList(state,value) { for(let i = 0; i < state.childTypeList.length; i++) { for (const key in state.childTypeList[i]) { if ( state.childTypeList[i][key] == state.clickNode.label) { value.pid = state.childTypeList[i].id value.children =[] state.childTypeList[i].children={...value} console.log('添加之后的value',value); } } } // 目前不调用函数 在弹窗中添加的子分类是可以在控制台显示出来的 所以当我们调用函数可以直接将state.childTypeList当作参数传递 console.log('循环外打印一下childTypeList',state.childTypeList); window.main.$store.commit('libraryKnowledge/setDataTree',state.childTypeList) // this.commit('libraryKnowledge/setDataTree', state.childTypeList) // state.flag+=1 }, 数组更新失效
时间: 2023-11-22 12:53:38 浏览: 75
nodejs-idb-connector:一个JavaScript(Node.js)库,用于与IBM i的Db2通信,并支持查询,过程等。 使用传统的回调样式语法
你的代码中出现了一个常见的问题:在 Vue.js 中,如果你直接修改数组的某个元素,Vue.js 是无法检测到这个变化的。所以,当你修改了 `state.childTypeList[i].children` 的值时,Vue.js 并没有触发视图更新。
为了解决这个问题,你需要使用 Vue.js 提供的方法来更新数组,比如 `Vue.set()` 或者 `splice()`。例如,你可以这样修改代码:
```
setChildTypeList(state, value) {
for (let i = 0; i < state.childTypeList.length; i++) {
for (const key in state.childTypeList[i]) {
if (state.childTypeList[i][key] == state.clickNode.label) {
value.pid = state.childTypeList[i].id;
value.children = [];
// 使用 Vue.set() 方法来更新数组
Vue.set(state.childTypeList[i], 'children', value);
console.log('添加之后的value', value);
}
}
}
console.log('循环外打印一下childTypeList', state.childTypeList);
window.main.$store.commit('libraryKnowledge/setDataTree', state.childTypeList);
// this.commit('libraryKnowledge/setDataTree', state.childTypeList)
// state.flag+=1
},
```
或者你也可以使用 `splice()` 方法来更新数组,例如:
```
setChildTypeList(state, value) {
for (let i = 0; i < state.childTypeList.length; i++) {
for (const key in state.childTypeList[i]) {
if (state.childTypeList[i][key] == state.clickNode.label) {
value.pid = state.childTypeList[i].id;
value.children = [];
// 使用 splice() 方法来更新数组
state.childTypeList.splice(i, 1, { ...state.childTypeList[i], children: value });
console.log('添加之后的value', value);
}
}
}
console.log('循环外打印一下childTypeList', state.childTypeList);
window.main.$store.commit('libraryKnowledge/setDataTree', state.childTypeList);
// this.commit('libraryKnowledge/setDataTree', state.childTypeList)
// state.flag+=1
},
```
这样,当你修改 `state.childTypeList[i].children` 的值时,Vue.js 就能够检测到这个变化,并且触发视图更新了。
阅读全文