天天看點

el-tree 餓了麼樹狀控件自定義節點的顯示圖示效果展示實作代碼

el-tree 餓了麼樹狀控件自定義節點的顯示圖示

  • 效果展示
  • 實作代碼
    • 替換小三角為圖示

效果展示

el-tree元件預設顯示時,節點是不帶icon的,如需使用時,可以通過自定義插槽的方式來實作,實作方式在網絡上也存在很多,本篇隻簡單記錄個人如何實作。

el-tree 餓了麼樹狀控件自定義節點的顯示圖示效果展示實作代碼

功能點:

  • 替換預設顯示的小三角圖示
  • 展開即關閉節點時圖示切換
  • 子節點的預設顯示圖示

實作代碼

<template>
  <div class="tree">
    <el-tree
      :data="data5"
      node-key="id"
      default-expand-all
      @node-expand="handlerNodeExpand"
      show-checkbox
    >
      <span class="custom-tree-node" slot-scope="{ node, data }">
        <span>
          <!-- <i :class="data.icon"></i> -->
          <i
            v-if="data.children.length!==0"
            :class="[
            node.expanded ? 'el-icon-folder-remove': 'el-icon-folder-add'
          ]"
          ></i>
          <i v-if="data.children.length===0" class="el-icon-document"></i>
          {{ node.label }}
        </span>
      </span>
    </el-tree>
  </div>
</template>

<script>
export default {
  name: 'customIconTree',
  data () {
    return {
      data5: [{
        id: 1,
        label: '一級節點 1',
        icon: 'el-icon-success',
        children: [{
          id: 4,
          label: '二級節點 1-1',
          icon: 'el-icon-folder-add',
          children: [{
            id: 9,
            label: '三級節點 1-1-1',
            icon: 'el-icon-info',
            children: [
              {
                id: 13,
                label: '三級節點 1-1-1-1',
                children: []
              }
            ]
          }, {
            id: 10,
            label: '三級節點 1-1-2',
            children: []
          }]
        }]
      },
      {
        id: 2,
        label: '一級節點 2',
        children: [{
          id: 5,
          label: '二級節點 2-1',
          children: []
        }, {
          id: 6,
          label: '二級節點 2-2',
          children: []
        }]
      },
      {
        id: 3,
        label: '一級節點 3',
        children: [{
          id: 7,
          label: '二級節點 3-1',
          children: []
        }, {
          id: 8,
          label: '二級節點 3-2',
          children: []
        }]
      },
      {
        id: 12,
        label: '一級節點-4',
        children: []
      }
      ],
      expandNodes: false
    }
  },
  methods: {
    handlerNodeExpand (data, node, element) {
      window.console.log(data)
      window.console.log(node)
      window.console.log(element)
    }
  }

}
</script>

<style scoped>
.tree >>> .el-tree-node__expand-icon.expanded {
  -webkit-transform: rotate(0deg);
  transform: rotate(0deg);
}
.tree >>> .el-icon-caret-right:before {
  content: "\e6d9";
  color: white;
  background-color: #dcdfe6;
}
.tree >>> .el-tree-node__expand-icon.expanded.el-icon-caret-right:before {
  content: "\e6d8";
  color: white;
  background-color: #dcdfe6;
}
.tree >>> .el-tree-node__expand-icon.is-leaf.el-icon-caret-right:before {
  background-color: transparent;
}
.tree >>> .el-tree-node__content > label.el-checkbox {
  margin-bottom: 2px;
}
</style>

           

實作解釋:

通過自定義插槽的方式,在資料渲染時添加i标簽,進而顯示圖示

通過el-tree通過的節點展開時間,在控制台輸出data、node、element後可以觀察發現,當點選展開節點時,node中存在一個expanded參數且值為 true:

el-tree 餓了麼樹狀控件自定義節點的顯示圖示效果展示實作代碼

考慮到元件封裝,如果在style中将圖示寫死,若是想改變圖示,勢必會影響其他地方的顯示,故綁定了icon容器span 的class屬性,通過node.expanded屬性來動态的改變icon的class屬性,後續隻需将目前寫的class替換為屬性,供使用者使用時按自己的需求進行綁定即可。

替換小三角為圖示

将預設的小三角圖示替換為自己需要的圖表,這裡使用的是style的方式,通過控制台檢視element,找到所在的元素,然後為其設定css樣式,具體參見上述完整代碼。

  tips:

   點滴記錄,彙聚江河