• 关于在Vue中使用ZTree


    在大数据量场景下Vue的数据监听机制决定了让渲染性能被降低,基于Vue实现的常规树组件几乎无法胜任上万条数据的高性能渲染,在IE浏览器(即便是IE11)中很容易导致页面卡死在,这个领域ztree是当之无愧最成熟的方案。

    有前辈使用了vue-giant-tree组件对Ztree进行了vue的封装,但是因为没有全部将ztree的接口暴露出,无奈还是得使用原生ZTree,本来我是用npm去装ztree的 后来发现,很多东西直接上手改源码会更快,尤其是当我想借用ztree的fuzzySearch的时候,于是我用了个笨方法,我把ztree当作静态JS拿进来直接用了,当然,这种做法未必可取。

    先来看一下我的结构树

     其中Ztree.vue就是我使用的组件,本来我是想写出slot形式的,但是考虑到后面的内置方法,我又放弃了,哈哈,先这么记着吧,后面可能就改掉了

    代码如下

    <template>
      <div class="this-tree">
        <div id="thisTree" class="ztree">
        </div>
      </div>
    
    </template>
    
    <script>
      import './jquery-1.4.4.min'
      import './jquery.ztree.core'
      import './jquery.ztree.exhide'
      import axios from 'axios'
      import fuzzySearch from '@/views/HomePage2D/zTree/fuzzysearch'
      import EventBus from '@/utils/EventBus'
    
      export default {
        name: 'zTree',
        components: {},
        data() {
          return {
            nodes: null,
            setting: {
              data: {
                simpleData: {
                  enable: true
                }
              },
              view: {
                showIcon: true, dblClickExpand: false, showLine: true
              },
              callback: {
                beforeClick: this.ztpreclick,
              }
            },
            ztreeObj: null,
          }
        },
        watch: {},
        computed: {},
        methods: {
          //zTree点击节点
          ztpreclick(treeId, treeNode, clickFlag) {
    
            this.ztreeObj.expandNode(treeNode)
    
            if (this.ztreeObj.getSelectedNodes().length > 0 && (this.ztreeObj.getSelectedNodes()[0].tId === treeNode.tId)) {
              this.ztreeObj.cancelSelectedNode()
              return false
            }
            if (!(treeNode.children!==null)) {
              EventBus.$emit('zoomToMonitorDevice', `${treeNode.id}`)
            }
          },
          constructFuzzySearch(_searchkeywords, isHighLight, isExpand) {
            fuzzySearch.Search(this.ztreeObj, _searchkeywords, isHighLight, isExpand)
          }
        },
        mounted() {
          let T = this
          axios.get('/camera/menu/list').then(res => {
            if (res.data.code !== 200) {
              this.$Message.error(res.data.msg)
            } else {
              T.nodes = res.data.data
              $.fn.zTree.init($('#thisTree'), T.setting, T.nodes)
              T.ztreeObj = $.fn.zTree.getZTreeObj('thisTree')
            }
          })
          // axios.get('/static/config/dataCollections.json').then(({data}) => {
          //   T.nodes = data.nodes
          //   $.fn.zTree.init($('#thisTree'), T.setting, T.nodes)
          //   T.ztreeObj = $.fn.zTree.getZTreeObj('thisTree')
          // })
    
        },
        beforeDestroy() {
        }
      }
    </script>
    
    <style lang="scss" scoped>
      @import url('./css/zTreeStyle/zTreeStyle.css');
      .this-tree {
    
        /*> > > .ztree li a.curSelectedNode {*/
        /*  background-color: rgba(255, 230, 176, 0);*/
        /*  border: 0px #FFB951 solid;*/
        /*}*/
    
        /*> > > .ztree li a {*/
        /*  color: #ffffff;*/
        /*}*/
    
        /*> > > .ztree {*/
        /*  .button {*/
        /*    height: 25px;*/
        /*  }*/
    
        /*.line:before, .line:after,*/
        /*.bottom_docu:before, .bottom_docu:after,*/
        /*.center_docu:before, .center_docu:after, {*/
        /*  border-color: #0090EC;*/
        /*  border- 1px;*/
        /*  border-style: solid*/
        /*}*/
    
    
        /*  .root_close:before, .center_close:before, .bottom_close:before, .roots_close:before {*/
        /*    border: 0px solid;*/
        /*    background-image: url("/static/images/+.png");*/
        /*     16px;*/
        /*    height: 16px;*/
        /*    transform: none;*/
        /*  }*/
    
        /*  .root_open:before, .roots_open:before, .center_open:before, .bottom_open:before {*/
        /*    border: 0px solid;*/
        /*    background-image: url("/static/images/-.png");*/
        /*     16px;*/
        /*    height: 16px;*/
        /*    transform: none;*/
        /*  }*/
    
    
        /*  .ico_open, .ico_docu, .ico_close {*/
        /*    background-position: center !important;*/
        /*  }*/
        /*}*/
      }
    
    </style>

    然后如果你要该式样,就去

    这里改他的原生的就行了,他的树结构点击+-号的变换是通过一整张图片,调整他的位置实现的

    可以自己去改成想要的

    然后css一定要在main.js中就要引入

     要不式样全部就没了

    然后是Ztree的查询功能

     

  • 相关阅读:
    算法>分支限界 小强斋
    C# DataGridView 的 CellValueChanged 与修改数据没保存的情况
    Windows8使用虚拟磁盘vhdx功能来为容量较大的文件夹扩容
    DataSet / DataTable 对 Access 数据库进行更改后,无法获取自动编号(自增)列的新值
    使用Windows Server 2012配置更新服务Update Service,以及客户端的配置
    在Windows 8中找回开始菜单
    DataSet / BindingSource / DataGridView / BindingNavigator 的关系与绑定、更新顺序
    Windows8 的搜狗输入法的快捷键推荐设置方法
    如果要使用DataAdapter来修改DataSet的子集时,请尽量对父级做修改。
    about PostgreSQL
  • 原文地址:https://www.cnblogs.com/yangzhengier/p/14284650.html
Copyright © 2020-2023  润新知