el-tree自定义内容

一、实现如下效果

默认展开所有节点,当点击某一个节点,在界面右侧展示改节点相关信息

二、思路

利用 el-treenode-click事件,得到当前节点的数据信息,并存储,在右侧使用el-descriptions展示。

使用slot-scope自定义节点内容,穿入两个参数:node 、data

三、实现代码

javascript 复制代码
<template>
 <div class="root" style="display: flex;">
  <div
    class="left"
    style="width: 50%; border-right: 1px solid #ccc; padding-right: 20px"
  >
    <!-- node-click 是tree的节点被点击时的回调,共三个参数:传递给data属性的数组中该节点对应的对象、节点对应的Node、节点组件本身 -->
     <!-- props label指定节点标签为节点对象的某个属性值,比如代码中label: label,表示节点展示的内容是 数据中label属性的值 -->
    <el-tree
      :data="data"
      :props="defaultProps"
      node-key="id"
      default-expand-all
      :expand-on-click-node="false"
      @node-click="handleNodeClick"
    >
      <span class="custom-tree-node" slot-scope="{ node, data }">
        <el-tooltip :content="node.label" placement="right">
          <span>{{ node.label }}</span>
        </el-tooltip>
        <span class="icon" style="margin-left: 10px">
          <i class="el-icon-circle-plus"></i>
          <i v-if="!data.children" class="el-icon-delete-solid"></i>
        </span>
      </span>
    </el-tree>
  </div>

  <div class="right" style="padding-left: 20px;width: 50%;" v-if="isShow">
    <el-descriptions title="相关信息" :column="1">
    <el-descriptions-item label="标题">{{ desData.title }}</el-descriptions-item>
    <el-descriptions-item label="描述" v-if="!desData.children">{{ desData.label }}</el-descriptions-item>
</el-descriptions>
  </div>
 </div>
 
</template>
<script>
export default {
  data() {
    const data = [
      {
        id: 1,
        label: "一级 1",
        title: "一级 1",
        children: [
          {
            id: 4,
            label: "二级 1-1",
            title: "二级 1-1",
            children: [
              {
                id: 9,
                label: "三级 1-1-1",
                title: "三级 1-1-1",
              },
              {
                id: 10,
                title: "三级 1-1-2",
                label: "三级 1-1-2",
              },
            ],
          },
        ],
      },
      {
        id: 2,
        label: "一级 2",
        title: "一级 2",
        children: [
          {
            id: 5,
            label: "二级 2-1",
            title: "二级 2-1",
          },
          {
            id: 6,
            label: "二级 2-2",
            title: "二级 2-2",
          },
        ],
      },
      {
        id: 3,
        label: "一级 3",
        title: "一级 3",
        children: [
          {
            id: 7,
            label: "二级 3-1",
            title: "二级 3-1",
          },
          {
            id: 8,
            label: "二级 3-2",
            title: "二级 3-2",
          },
        ],
      },
    ];
    return {
      data: JSON.parse(JSON.stringify(data)),
      desData:[],
      defaultProps: {
        children: 'children',
        label: 'label'
      },
      isShow: false
    };
  },

  methods: {
   handleNodeClick(data){
    this.desData=data
    this.isShow=true
   }
  },
};
</script>
相关推荐
熊猫_豆豆8 分钟前
一个模拟四轴飞行器在随机气流扰动下悬停飞行的交互式3D仿真网页,包含飞行器建模与PID控制算法
javascript·3d·html·四轴无人机模拟飞行
来恩10031 小时前
jQuery选择器
前端·javascript·jquery
前端繁华如梦1 小时前
树上挂苹果还是挂玻璃球?Three.js 程序化果实的完整实现指南
前端·javascript
CDwenhuohuo2 小时前
优惠券组件直接用 uview plus
前端·javascript·vue.js
川冰ICE2 小时前
TypeScript装饰器与元编程实战
前端·javascript·typescript
AI砖家3 小时前
Vue3组件传参大全,各种传参方式的对比
前端·javascript·vue.js
希望永不加班3 小时前
var局部变量类型推断的利弊
java·服务器·前端·javascript·html
threelab3 小时前
Three.js 3D 地图可视化 | 三维可视化 / AI 提示词
前端·javascript·人工智能·3d·着色器
爱怪笑的小杰杰3 小时前
Leaflet 高性能大数据量图圆:彻底解决缩放/拖拽偏移问题
大数据·前端·vue.js·贴图
失眠的咕噜4 小时前
PDA 安卓设备上传多张图片
android·前端·javascript