element目录树组件el-tree使用相关笔记

文章详细介绍了Vue中el-tree组件的配置、懒加载数据处理、递归遍历、搜索功能、节点高亮、图标添加、可编辑树以及点击事件的处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

默认配置

            <el-tree
              ref="tree"
              highlight-current // 高亮当前选中节点
              accordion // 只打开一个同级树节点展开
              :data="treeData" 
              :expand-on-click-node="false" // 单击节点是否展开(懒加载模式下无效)
              :props="treeDefaultProps" // 映射属性值
              node-key="id" // 标识属性
              :default-expanded-keys="['-1']"  // 默认展开的节点
              @node-click="handleNodeClick" 
              :filter-node-method="filterNode" // 对树节点进行筛选时执行的方法,返回 true则显示
              :check-on-click-node="true" // 点击节点时选中
            >
data() {
   
    return {
    
	   	treeData:[
                id: '-1',
                label: '全部',
                leaf: false,
                children: [
				{
   
				...
				},
				{
   
				...
				}
			],
		],
		treeDefaultProps:{
   
        children: 'children',
        label: 'label',
        isLeaf: 'leaf',
      },
    }        
}

懒加载

   <el-tree
     :load="queryTreeData"
     lazy
   >
    // 获取树目录
    queryTreeData(node, resolve) {
   
      const {
    level } = node
      // nodeId 为 -1代表第一次请求
      let nodeId = level == 0 ? '-1' : node.data.id
      const params = {
   
        displayTable: true,
        parentId: nodeId,
      }
      api
        .queryDirectoryLazyLoad(params)
        .then((res) => {
   
          const nodes = res.map((item) => ({
   
            id: item.id,
            label: item.name,
            leaf: !item.hasChildren,
          }))
          // 初始化请求
          if (level == 0) {
   
            resolve([
              {
   
                id: '-1',
                label: '全部',
                leaf: false,
                children: nodes, // 非必要
              },
            ])
          } else {
   
            resolve(nodes)
          }
        })
        .then(() => {
   
          this.$refs.tree.setCurrentKey(this.directoryId)
        })
        .catch((error) => {
   
          console.log(error)
        })
    },

每一级分页懒加载

(待补充)

递归处理数据

递归遍历树级结构,进行字段映射

    mapTree(data) {
   
      const haveChildren =
        Array.isArray(data.childNode) && data.childNode.length
      return {
   
        label: data.nodeName,
        id: data.nodeId,
        children: haveChildren
          ? data.childNode.map((i) => this.mapTree
对于记录二次封装select的问题,你可以参考引用中的文章目录,其中有关于单选、多选select分页(支持搜索)的内容,这些内容可以帮助你进行二次封装select的记录。此外,你还可以参考引用中关于使用elementUI Select选择器和Pagination分页组件进行性能优化处理的内容,这也可以作为你记录二次封装select的参考。希望这些内容对你有帮助。 文章目录: 一、单选、多选select分页(支持搜索) 二、selectTree 支持单选和多选 三、element table表格勾选联动(带搜索) 引用:由于项目中有时一个select的候选项会一次性返回很多数据,比如我的就有上万条。一次性都渲染会造成页面直接卡死。本篇笔记就记录一下如何使用 elmentUI Select 选择器 和Pagination 分页组件进行性能优化处理。 你也可以对次进行改编成模板&hellip; 简单说明: 1. 支持搜索记忆功能,在搜索中途关闭选项卡时,会显示上次已选的正确选项。当input中有正确的值时会自动跳转到对应的分页 2. 如果你对此封装成了自己的组件,在子向传父组件传递候选项数据时,需要同时对options和options1进行赋值且他们的值应保持一致。 引用: 文章目录 前言 一、单选、多选select分页(支持搜索) 二、selectTree 支持单选和多选 三、element table表格勾选联动(带搜索) 引用中的简单说明: 1. 常用属性配置(调用示例) * <tree-select :height="400" // 下拉框中树形高度 :width="200" // 下拉框中树形宽度 不填写自适应el-select input框大小 size="small" // 输入框的尺寸: medium/small/mini :data="data" // 树结构的数据或者普通包含主键,父主键的普通集合 :obj="{}" // 可自定义字段,字段映射见最下面 multiple // 多选 :default-keys="..." // 默认值:单选可传入数字,字符串,对象;多选传入【数字|字符|对象】数组,其他非法 clearable // 可清空选择 collapseTags // 多选时将选中值按文字的形式展示 expand-click-node // 点击节点自动展开。多选有效 check-click-node // 是否点击节点是选中 多选生效 checkStrictly // 多选时,严格遵循父子不互相关联 效果参考elementui 对应属性效果 @getValue="父组件获取值方法"> // 事件有两个参数:第一个是所有选中的节点ID,第二个是所有选中的节点数据 </tree-select> :obj 字段映射如下,值填写你实际字段,可拓展字段。最终返回主键以及选择对象【全部字段】 id:'id',//可改成自己对应主键【改值】 label: 'label',// 显示名称 children: 'children', //子级字段名 path:'path',//路径 content:'content',
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值