请改进下面的代码:// 设置数据 setDataMap(res) { this.treeData = res; this.tempTreeData = this.treeData; this.dataList = res; // 循环设置树节点加载内容 for (let i = 0; i < this.dataList.length; i++) { let item = this.dataList[i]; // 如果为仅选择部门的情况,将人员过滤掉 this.dataMap[item.key] = item; delete item.scopedSlots; item.scopedSlots = {title: "custom"}; if (item.children && item.children.length) { // 如果为仅选择部门的情况,将人员过滤掉 if (this.selectType === 'dept') { item.children = item.children.filter(item => !item.userId) } this.dataList = this.dataList.concat(item.children); } } },
时间: 2024-02-14 10:06:24 浏览: 84
可以考虑对代码进行如下改进:
1. 将数据处理逻辑封装成单独的函数,提高代码的可读性和复用性。
2. 使用 Vue.set 方法更新组件的属性,以保证数据响应式更新。
改进后的代码如下:
```
setDataMap(res) {
this.treeData = res;
this.tempTreeData = this.treeData;
this.dataList = res;
this.dataMap = {}; // 初始化 dataMap 对象
// 处理数据逻辑
const processItem = (item) => {
this.dataMap[item.key] = item;
Vue.set(item, 'scopedSlots', {title: "custom"});
if (item.children && item.children.length) {
if (this.selectType === 'dept') {
item.children = item.children.filter(child => !child.userId);
}
this.dataList = this.dataList.concat(item.children);
}
}
// 遍历 dataList 数组,处理每个元素
this.dataList.forEach(item => {
processItem(item);
});
},
```
改进后的代码将数据处理逻辑封装在 processItem 函数中,使代码更加清晰。在处理数据时,使用 Vue.set 方法更新组件的属性,以确保数据响应式更新。同时,添加了对 dataMap 对象的初始化,避免在多次调用 setDataMap 方法时出现数据混乱的问题。
阅读全文