当前位置:首页 > VUE

vue整合ztree实现树状

2026-01-22 21:26:02VUE

Vue整合ZTree实现树状结构

安装ZTree依赖

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

npm install jquery ztree

main.js中全局引入:

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:

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监听数据变化或调用方法手动更新:

vue整合ztree实现树状

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

注意事项

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

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

相关文章

vue 实现搜索

vue 实现搜索

实现 Vue 搜索功能 在 Vue 中实现搜索功能通常涉及以下几个关键步骤: 数据绑定与输入监听 使用 v-model 双向绑定搜索输入框的值,监听用户输入: <template>…

vue实现dag

vue实现dag

Vue实现DAG(有向无环图) 在Vue中实现DAG(Directed Acyclic Graph,有向无环图)通常涉及数据结构的建模、可视化渲染以及交互逻辑处理。以下是关键实现步骤和示例代码: 数…

vue for实现

vue for实现

Vue 中的 v-for 指令 v-for 是 Vue.js 中用于渲染列表数据的核心指令,通过遍历数组或对象生成动态内容。 基本语法(数组) <ul> <li v-for="…

vue实现绘图

vue实现绘图

Vue 实现绘图的方法 在 Vue 中实现绘图功能,可以通过多种方式实现,包括使用原生 HTML5 Canvas、第三方库(如 Fabric.js、Konva.js)或 SVG。以下是几种常见的实现方…

自己实现vue

自己实现vue

实现简易版 Vue.js 核心功能 要实现一个简易版 Vue.js,需要理解其核心功能:数据响应式、模板编译、依赖收集和虚拟 DOM。以下分模块实现关键功能。 数据响应式(Reactivity) 通…

vue实现卡片

vue实现卡片

Vue 实现卡片组件的方法 使用 Vue 实现卡片组件可以通过多种方式完成,以下是几种常见的实现方法: 使用原生 HTML 和 CSS 在 Vue 单文件组件中,可以通过模板和样式直接实现卡片效果…