使用element-ui框架的积累(四)

如何实现树型结构单选

树型结构数据 single.json

[{
    "id": "1",
    "label": "running man",
    "children": [{
        "id": "r1",
        "label": "刘在石"
    }, {
        "id": "r2",
        "label": "池石镇"
    }, {
        "id": "r3",
        "label": "金钟国"
    }, {
        "id": "r4",
        "label": "gray"
    }, {
        "id": "r5",
        "label": "HAHA"
    }, {
        "id": "r6",
        "label": "宋智孝"
    }, {
        "id": "r7",
        "label": "李光洙"
    }]
},{
    "id":"2",
    "label":"仙剑奇侠传三",
    "children":[
        {
            "id":"x1",
            "label":"景天"
        },{
            "id":"x2",
            "label":"徐长卿"
        },{
            "id":"x3",
            "label":"龙葵"
        },{
            "id":"x4",
            "label":"茂茂"
        },{
            "id":"x5",
            "label":"唐雪见"
        },{
            "id":"x6",
            "label":"紫萱"
        },{
            "id":"x7",
            "label":"重楼"
        },{
            "id":"x8",
            "label":"邪剑仙"
        }
    ]
},{
    "id":"3",
    "label":"山海情",
    "children":[
        {"id":"s1","label":"李水花"},
        {"id":"s2","label":"白麦苗"}
    ]
}]

index.vue

<template>
  <el-tree :data="singleTree" node-key="id" ref="singleTree" show-checkbox :check-strictly="true" @check-change="handlerSingleSelect"> </el-tree>
</template>

<script>
  export default {
    data() {
      return {
        singleTree:[],//实现单选树型结构数据
      }
    },
    mounted() {
      this.init();
    },
    methods: {
      init() {  
        this.$http.get("http://localhost:3000/public/single.json").then(res=>{
          this.singleTree=this.disabledParent(res.data);
        })
      },
      // 禁止父节点被点击
      disabledParent(data) {
        data.forEach((node) => {
          if (node.children) {
            node.disabled = true;
            this.disabledParent(node.children)
          } else {
            return
          }
        })
        return data;
      },
      handlerSingleSelect(data,check,node){
        if(check){
          this.$refs.singleTree.setCheckedNodes([data])
        }
        console.log(data,node)
      }
    }
  };
</script>

 实现自定义图标

 

 

 

 

关键代码

<el-tree
          :data="dataTree"
          :check-strictly="true"
          show-checkbox
          default-expand-all
          node-key="id"
          ref="tree"
          highlight-current
          :props="defaultProps"
           :render-content="renderContent"
        >
        </el-tree>

  mounted() {
    let dataInfo = [
      {
        id: "1",
        label: "running man",
        children: [
          {
            id: "r1",
            label: "刘在石",
          },
          {
            id: "r2",
            label: "池石镇",
          },
          {
            id: "r3",
            label: "金钟国",
          },
          {
            id: "r4",
            label: "gray",
          },
          {
            id: "r5",
            label: "HAHA",
          },
          {
            id: "r6",
            label: "宋智孝",
          },
          {
            id: "r7",
            label: "李光洙",
          },
        ],
      },
      {
        id: "2",
        label: "仙剑奇侠传三",
        children: [
          {
            id: "x1",
            label: "景天",
          },
          {
            id: "x2",
            label: "徐长卿",
          },
          {
            id: "x3",
            label: "龙葵",
          },
          {
            id: "x4",
            label: "茂茂",
          },
          {
            id: "x5",
            label: "唐雪见",
          },
          {
            id: "x6",
            label: "紫萱",
          },
          {
            id: "x7",
            label: "重楼",
          },
          {
            id: "x8",
            label: "邪剑仙",
          },
        ],
      },
      {
        id: "3",
        label: "山海情",
        children: [
          { id: "s1", label: "李水花" },
          { id: "s2", label: "白麦苗" },
        ],
      },
    ];
    this.dataTree = this.formatTreeData(dataInfo);
  },

methods:{
 renderContent(h,{node,data,store}){
      return(<span><i class={data.iconType}></i><span>{node.label}</span></span>)

    },
    formatTreeData(data) {
      if (data && data.length > 0) {
        data.forEach((item) => {
          if (item.children) {
            item.iconType = "el-icon-menu";
            this.formatTreeData(item.children);
          } else {
            item.iconType = "el-icon-s-custom";
            return;
          }
        });
      }
      return data;
    },

}

 

 

 

1111

posted @ 2021-02-05 21:09  山吹同学  阅读(98)  评论(0编辑  收藏  举报