element-ui tree 設置與上級嚴格關聯(lián)、下級不嚴格關聯(lián)

應用場景:

動態(tài)路由權限配置,菜單按鈕在一顆樹內顯示,要求按鈕可以不被勾選(按鈕一定為葉子節(jié)點),即葉子節(jié)點可以不嚴格關聯(lián)
此時我們的tree需要設置node-key、check-strictlytrue,

截屏2020-04-17下午11.20.04.png

截屏2020-04-17下午11.23.54.png

實現(xiàn)邏輯

監(jiān)聽tree的check事件和treesetChecked方法
tips:tree的數據(data)每級需要有上級的父節(jié)點id字段

實現(xiàn)方法

1.組建設置,如果返回的數據字段與tree的指定字段不相同,通過props設置

    <el-tree
      :data="treeData"
      node-key="id"
      show-checkbox
      check-strictly
      ref="tree"
      @check="hanleCheck"
    ></el-tree>

2.監(jiān)聽treecheck方法,這里我們設置上次id的字段為parentId

hanleCheck(data,node){
    const  _this = this
    // 獲取當前節(jié)點是否被選中
    const isChecked = this.$refs.tree.getNode(data).checked
   // 如果當前節(jié)點被選中,則遍歷上級節(jié)點和下級子節(jié)點并選中,如果當前節(jié)點取消選中,則遍歷下級節(jié)點并取消選中
    if(isChecked){
        // 判斷是否有上級節(jié)點,如果有那么遍歷設置上級節(jié)點選中
        data.parentId &&  setParentChecked(data.parentId)
        // 判斷該節(jié)點是否有下級節(jié)點,如果有那么遍歷設置下級節(jié)點為選中
        data.children && setChildreChecked(data.children,true)
     }else{
       // 如果節(jié)點取消選中,則取消該節(jié)點下的子節(jié)點選中
        data.children && setChildreChecked(data.children,false)
      }
      function setParentChecked(parenId){
          // 獲取該id的父級node
          const parentNode = _this.$refs.tree.getNode(parentId)
         // 如果該id的父級node存在父級id則繼續(xù)遍歷
          parentNode.data.parentId && setParentChecked(setParentChecked)
          //  設置該id的節(jié)點為選中狀態(tài)
          _this.$refs.tree.setChecked(parenId,true)
      }
      function setChildreChecked(node,isChecked){
        node.forEach(item => {
          item.children && setChildreChecked(item.children,isChecked)
          _this.$refs.setChecked(item.id,isChecked)
        })
      }
    
}
案例

demo

屏幕錄制2020-04-18上午12.24.07.gif

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容