鍍金池/ 問答/HTML/ elementUI el-tree 初始化數組中如果有父ID將會關聯(lián)所有子節(jié)點

elementUI el-tree 初始化數組中如果有父ID將會關聯(lián)所有子節(jié)點

后臺返回[46,64,49,79]數組,但是將該輸出給el-tree,因為數組里面有父節(jié)點ID(46),所以父節(jié)點下面的所有子節(jié)點都被勾選了
圖片描述

通過設置check-strictly可以解決初始化勾選問題,但是傳給后臺又需要所選子節(jié)點的父節(jié)點ID,這個該怎么解決,就大神幫忙?。。?!

我是這樣獲取所選父子節(jié)點ID

this.$refs.tree.getHalfCheckedKeys(), this.$refs.tree.getCheckedKeys()
回答
編輯回答
別逞強

想了一個辦法,但是感覺不是最好的辦法,處理方式如下:
通過遞歸遍歷所有的子節(jié)點,然后根據后臺傳過來的所選節(jié)點id匹配,判斷該遍歷的節(jié)點id和后臺所選id比較,比較為true就會進行setChecked操作
1、在頁面生命周期的created事件中,執(zhí)行菜單樹的根節(jié)點遍歷方法

created() {
    this.foreachMenuRoot()
},

2、遍歷有兩個坑
2.1、頁面初始化的時候this.$refs.tree還是undefined未定義
2.2、當created將頁面元素加載完成后this.$refs.tree.children菜單樹還沒加載完,所以也是undefined未定義(ps:請求后臺那數據會有一定的延遲,樹的數據加載過程也會有一定的延遲)

foreachMenuRoot() {
      // 遞歸勾選菜單樹
      const _this = this
      // 由于目前頁面created加載的時候this.$refs.tree樹還未加載完成,所以非空判斷
      if (this.$refs.tree !== undefined && this.$refs.tree.children !== undefined && this.$refs.tree.children !== null) {
        this.$refs.tree.children.forEach(function(node) {
          if (_this.form.menuIds.indexOf(node.id) !== -1) {
            _this.$refs.tree.setChecked(node.id, true, false)
          }
          if (node.children !== undefined && node.children !== null && node.children.length > 0) {
            _this.whileMenuIdsCheckedElTree(node)
          }
        })
        this.formLoading = false
      } else {
        // 由于數據未能及時加載完成,做一個定時循環(huán)去執(zhí)行
        setTimeout(() => {
          _this.foreachMenuRoot()
        }, 3000)
      }
    },

3、遞歸遍歷根節(jié)點的葉子節(jié)點

whileMenuIdsCheckedElTree(node) {
      const _this = this
      node.children.forEach(function(cnode) {
        if (_this.form.menuIds.indexOf(cnode.id) !== -1) {
          _this.$refs.tree.setChecked(cnode.id, true, false)
        }
        if (cnode.children !== undefined && cnode.children !== null && cnode.children.length > 0) {
          _this.whileMenuIdsCheckedElTree(cnode)
        }
      })
    }

自己不是專業(yè)的前端工程師,一直都是后端開發(fā),如果有更好的思路和想法歡迎一起探討

2018年5月10日 21:09