报错如下:
树结构显示角色的权限,勾选中的item是拥有的。但是在遍历数组获取选中item时报递归栈超出最大size.
错误源码:
getIds() {
this.allPermission.map(myItem => {
if (myItem.select) {
//select状态添加
this.checkKeys.push(myItem.id)
}
if (myItem.children && myItem.children.length) {
this.getIds(myItem.children)
}
})
},
//
async getAssign() {
let result = await this.$API.permission.toAssign(this.roleId);
console.log(result);
if (result.code = 20000) {
this.allPermission = result.data.children || [];
this.checkKeys = []
this.getIds() //调用报错:超出最大递归层数
}
}
},
解决:
多次调试检查代码,发现递归的数组一直是 this.allPermission ,导致递归出不去,死循环了。
修改如下:
getIds(arr) {
// this.allPermission.map(myItem => {
arr.map(myItem => {
if (myItem.select) {
//select状态添加
this.checkKeys.push(myItem.id)
}
if (myItem.children && myItem.children.length) {
this.getIds(myItem.children)
}
})
},
//
async getAssign() {
let result = await this.$API.permission.toAssign(this.roleId);
console.log(result);
if (result.code = 20000) {
this.allPermission = result.data.children || [];
this.checkKeys = []
this.getIds(this.allPermission) //调用报错:超出最大递归层数
}
}
},
递归的函数传递数组进去。不用this.allPermission.