• eltree使用笔记定位到指定节点,查找其所有父级节点,并展开,vue组件动态引入


    <template>
      <div class="top">
        <el-tree
            ref="tree"
            :data="data"
            :props="defaultProps"
            accordion
            :expand-on-click-node="true"
            auto-expand-parent
            highlight-current
            node-key="code"
            :default-expanded-keys="defaultShowNodes"
            @node-click="handleNodeClick"
          >
            <!-- 可自定义节点样式 -->
            <span slot-scope="{data}" class="custom-tree-node">
              <span class="treeSpan">{{ data.name }}</span>
              <span>{{ data.contentTotal }}篇</span>
            </span>
          </el-tree>    
        </div>
    </template>
    
    <script>
    export default {
      components: {
        ShareDialog
      },
      data() {
        return {
          data: [{
            id: '1',
            name: '测试节点1',
            code: '001',
            subs: [{
              id: '11',
              name: '测试节点11',
              code: '001001',
              subs: [{
                id: '111',
                name: '测试节点111',
                code: '001001001'
              }, {
                id: '112',
                name: '测试节点112',
                code: '001001002'
              }]
            }, {
              id: '12',
              name: '测试节点12',
              code: '001002'
            }]
          }, {
            id: '2',
            name: '测试节点2',
            code: '002'
          }],
          defaultProps: {
            children: 'subs',
            label: 'name'
          },
          nodeParentAll: [],
          props: {
            children: 'children',
            label: 'label'
          }
        }
      },
      computed: {
        // 通过计算属性动态引入组件
        loadPage() {
          return () => import('@/components/page.vue')
        },
        // 通过计算属性动态引入组件
        loadCollect() {
          return () => import('@/components/collect.vue')
        }
      },
      methods: {
        // 通过节点的key(这里使用的是数据中的code属性,node-key="code")获取并高亮显示指定节点,并展开其所有父级节点
        getAndExpandAll(nodeKey) {
          if (nodeKey) {
            this.$nextTick(() => { // 等待树组件渲染完成再执行相关操作
              // 获取节点
              const node = this.$refs.tree.getNode(nodeKey)
              if (node) {
                // 获取其所有父级节点
                this.getParentAll(node)
                if (this.nodeParentAll.length > 0) {
                  // 将获取到的所有父级节点进行展开
                  for (var i = 0, n = this.nodeParentAll.length; i < n; i++) {
                    this.$refs.tree.store.nodesMap[this.nodeParentAll[i].data.code].expanded = true
                  }
                }
    
                // 将节点高亮显示
                this.$refs.tree.setCurrentKey(nodeKey)
              }
            })
          }
        },
        // 获取所有父级节点
        getParentAll(node) {
          if (node) {
            this.nodeParentAll = []
            // 节点的第一个父级
            var parentNode = node.parent
            // level为节点的层级 level=1 为顶级节点
            for (var j = 0, lv = node.level; j < lv; j++) {
              if (parentNode.level > 0) {
                // 将所有父级节点放入集合中
                this.nodeParentAll.push(parentNode)
              }
              // 继续获取父级节点的父级节点
              parentNode = parentNode.parent
            }
    
            if (this.nodeParentAll.length > 1) {
              // 如果集合长度>1 则将数组进行倒叙.reverse() 其是就是将所有节点按照 从 顶级节点 依次往下排
              this.nodeParentAll.reverse()
            }
          }
        },
      }
    }
    
    </script>

    每天进步一点点,点滴记录,积少成多。

    以此做个记录,

    如有不足之处还望多多留言指教!

  • 相关阅读:
    npm 常用指令
    跨域详解
    模板
    Set-Cookie
    哈佛大学公开课 幸福课 积极心理学
    Token Authentication vs. Cookies
    Using Cookieless Forms Authentication Tickets
    What Is Token-Based Authentication and Who Uses It?
    Types of authentication wiz. oauth, digest, basic, token-based
    Session Authentication vs Token Authentication
  • 原文地址:https://www.cnblogs.com/jindao3691/p/16195724.html
Copyright © 2020-2023  润新知