当前位置:首页 > VUE

vue整合ztree实现树状

2026-01-22 21:26:02VUE

Vue整合ZTree实现树状结构

安装ZTree依赖

在Vue项目中引入ZTree需要添加jQuery和ZTree的相关文件。通过npm或直接引入CDN链接实现:

npm install jquery ztree

main.js中全局引入:

vue整合ztree实现树状

import $ from 'jquery'
import 'ztree'
import 'ztree/css/zTreeStyle/zTreeStyle.css'
window.$ = $

创建ZTree容器组件

新建一个Vue组件(如ZTree.vue),用于渲染ZTree的DOM容器:

<template>
  <div class="ztree-container">
    <ul id="treeDemo" class="ztree"></ul>
  </div>
</template>

<style scoped>
.ztree-container {
  width: 100%;
  height: 400px;
  overflow: auto;
}
</style>

初始化ZTree配置

在组件的mounted生命周期中初始化ZTree:

vue整合ztree实现树状

export default {
  props: {
    treeData: Array,
    setting: Object
  },
  mounted() {
    this.initZTree()
  },
  methods: {
    initZTree() {
      const defaultSetting = {
        data: {
          simpleData: {
            enable: true,
            idKey: 'id',
            pIdKey: 'parentId',
            rootPId: 0
          }
        },
        callback: {
          onClick: this.handleNodeClick
        }
      }
      const finalSetting = Object.assign({}, defaultSetting, this.setting)
      $.fn.zTree.init($('#treeDemo'), finalSetting, this.treeData)
    },
    handleNodeClick(event, treeId, treeNode) {
      this.$emit('node-click', treeNode)
    }
  },
  watch: {
    treeData(newVal) {
      this.initZTree()
    }
  }
}

使用组件示例

在父组件中调用ZTree组件并传递数据:

<template>
  <div>
    <z-tree 
      :tree-data="treeNodes" 
      :setting="treeSettings"
      @node-click="onNodeClick"
    />
  </div>
</template>

<script>
import ZTree from './components/ZTree'
export default {
  components: { ZTree },
  data() {
    return {
      treeNodes: [
        { id: 1, parentId: 0, name: '父节点1' },
        { id: 2, parentId: 1, name: '子节点1' }
      ],
      treeSettings: {
        check: {
          enable: true
        }
      }
    }
  },
  methods: {
    onNodeClick(node) {
      console.log('选中节点:', node)
    }
  }
}
</script>

常用配置项说明

  • data.simpleData.enable: 启用简单数据模式(扁平数据结构)
  • check.enable: 显示复选框
  • view.showIcon: 显示节点图标
  • callback.onCheck: 复选框勾选回调
  • async.enable: 启用异步加载模式

动态更新数据

通过watch监听数据变化或调用方法手动更新:

// 更新树数据
const zTreeObj = $.fn.zTree.getZTreeObj("treeDemo")
zTreeObj.reAsyncChildNodes(null, "refresh")

注意事项

  • 确保jQuery仅在ZTree组件范围内使用,避免与其他Vue插件冲突
  • 复杂操作建议封装成组件方法通过ref调用
  • 大数据量建议启用异步加载或虚拟滚动优化性能

标签: 树状vue
分享给朋友:

相关文章

vue响应式实现

vue响应式实现

Vue 响应式实现原理 Vue 的响应式系统基于 Object.defineProperty(Vue 2.x)或 Proxy(Vue 3.x)实现,通过数据劫持和依赖收集实现数据变化时的自动更新。…

vue实现按卡片轮播

vue实现按卡片轮播

实现卡片轮播的基本思路 在Vue中实现卡片轮播可以通过结合v-for指令和动态样式绑定完成。核心是维护一个当前显示卡片的索引,通过CSS过渡效果实现平滑切换。 基础实现步骤 模板部分 使用v-for…

vue实现展开与收起

vue实现展开与收起

Vue 实现展开与收起功能 在 Vue 中实现展开与收起功能可以通过多种方式完成,以下是一些常见的方法: 使用 v-show 或 v-if 控制显示 通过 Vue 的指令 v-show 或 v-if…

vue实现多用户登录

vue实现多用户登录

实现多用户登录的基本思路 在Vue中实现多用户登录通常需要结合后端API完成身份验证,并通过前端路由、状态管理(如Vuex或Pinia)和本地存储(如localStorage)来管理用户会话。以下是关…

vue自己实现下拉导航

vue自己实现下拉导航

实现下拉导航的基本思路 在Vue中实现下拉导航,可以通过结合Vue的响应式数据和事件绑定特性来完成。主要思路是利用v-show或v-if控制下拉菜单的显示与隐藏,并通过鼠标事件或点击事件触发状态变化。…

vue实现右下角弹框

vue实现右下角弹框

实现右下角弹框的基本思路 在Vue中实现右下角弹框,通常需要结合CSS定位和Vue的组件化特性。弹框可以通过绝对定位固定在右下角,并通过Vue控制其显示与隐藏。 创建弹框组件 新建一个Vue组件(如…