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

文章目录

    • 默认配置
    • 懒加载
    • 每一级分页懒加载
    • 递归处理数据
      • 递归遍历树级结构,进行字段映射
      • 一维数组处理为树结构
    • 默认选中并展开特定节点
      • 初始化的需求场景
      • 切换tab后的需求场景
    • 禁止点击事件
    • 搜索
      • 本地搜索
      • 搜索后滚动定位结果
    • 添加图标
      • 方法一: 通过伪类的 background 属性
      • 方法二: 通过 img 标签引入图片
    • 修改选中的高亮 (图标和颜色)
      • 选中时图标切换
      • 文字和背景的高亮
    • 可编辑树
    • 点击展开后回调
    • 点击节点图标切换显示(包含一键切换全部图标)

默认配置

            <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(i)

你可能感兴趣的:(笔记,vue.js,javascript,elementui)