vue2 elementui tree组件配置选中项目时报Maximum call stack size

导读:本篇文章讲解 vue2 elementui tree组件配置选中项目时报Maximum call stack size,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

报错如下:

树结构显示角色的权限,勾选中的item是拥有的。但是在遍历数组获取选中item时报递归栈超出最大size. 

vue2 elementui tree组件配置选中项目时报Maximum call stack 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.

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/101523.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!