Vue使用zTree插件封装树组件操作示例


Posted in Javascript onApril 25, 2019

本文实例讲述了Vue使用zTree插件封装树组件操作。分享给大家供大家参考,具体如下:

1.通过npm安装jquery

npm install jquery --save-dev

2.在build/webpack.base.conf文件当中引入jquery

module.exports = {
  ...
  resolve: {
    extensions: ['.js', '.vue', '.json'],
    alias: {
      'vue$': 'vue/dist/vue.esm.js',
      '@': resolve('src'),
      'jquery': path.resolve(__dirname, '../node_modules/jquery/src/jquery')
    }
  },
  ...
}

3.在项目根目录创建一个文件夹plugins,将zTree的js文件放进去

Vue使用zTree插件封装树组件操作示例

4.将zTree的样式文件放在static文件夹下(放在别的地方大饱之后会出现图片路径找不到等问题,放在static下打包时会避免ztree样式的压缩)。在main.js中引入该样式:

import '../static/zTreeStyle/zTreeStyle.css'

5.创建公共组件ztree>index.vue,下面为我的公共组件

html:

<template>
  <div class="ztree">
    <el-row>
      <el-col :span="12">
        <el-button icon="el-icon-plus" size="mini" type="text" @click="add">新增节点</el-button>
      </el-col>
      <el-col :span="12">
        <el-button icon="el-icon-delete" type="text" size="mini" @click="remove">删除节点</el-button>
      </el-col>
    </el-row>
    <ul id="treeDemo" class="ztree"></ul>
    </div>
</template>

js:

<script>
import '../../../plugins/zTree/jquery-1.4.4.min'
import '../../../plugins/zTree/jquery.ztree.core'
import '../../../plugins/zTree/jquery.ztree.excheck'
import '../../../plugins/zTree/jquery.ztree.exedit'
export default {
  props: {
    zNodes: {
      type: Array
    },
    selectedNodeId: ""
  },
  data() {
    return {
      selectedNode: {},
      setting: {
        view: {
          showIcon: false
        },
        edit: {
          enable: true,
          showRemoveBtn: false,
          showRenameBtn: false
        },
        data: {
          keep: {
            parent: true,
            leaf: true
          },
          simpleData: {
            enable: true
          }
        },
        callback: {
          onClick: this.zTreeOnClick,
          onRename: this.zTreeOnRename
        }
      }
    };
  },
  methods: {
    // 初始化ztree
    init() {
      $.fn.zTree.init($("#treeDemo"), this.setting, this.zNodes);
    },
    // 树节点点击事件
    zTreeOnClick: function(event, treeId, treeNode) {
      this.selectedNode = treeNode;
      this.$emit("treeClick", treeNode);
    },
    // 树节点编辑名称回调
    zTreeOnRename(event, treeId, treeNode, isCancel) {
      this.$emit("addNode", treeNode);
    },
    // 点击添加按钮事件
    add() {
      let newCount = 1;
      let zTree = $.fn.zTree.getZTreeObj("treeDemo"),
      nodes = zTree.getSelectedNodes(),
      treeNode = nodes[0];
      if (treeNode) {
        if (treeNode.level === 2) {
          this.$message("分类不能超过三级");
          return;
        } else {
          treeNode = zTree.addNodes(treeNode, {
            id: 100 + newCount,
            isParent: true,
            pId: treeNode.id,
            name: "new node" + newCount++
          });
        }
      } else {
        treeNode = zTree.addNodes(null, {
          id: 100 + newCount,
          isParent: true,
          pId: 0,
          name: "new node" + newCount++
        });
       }
      zTree.editName(treeNode[0]);
    },
    // 点击删除按钮事件
    remove() {
      let zTree = $.fn.zTree.getZTreeObj("treeDemo"),
      nodes = zTree.getSelectedNodes(),
      treeNode = nodes[0];
      if (nodes.length == 0) {
        this.$message("请先选择一个节点");
        return;
      } else {
        this.$confirm("此操作将永久删除该节点, 是否继续?", "提示", {
          confirmButtonText: "确定",
          cancelButtonText: "取消",
          type: "warning"
        })
        .then(() => {
          this.$emit("removeNode", treeNode);
        })
        .catch(() => {});
      }
    }
  },
  watch: {
    // 监听树节点的变化更新树
    zNodes: function(val) {
      this.init();
    },
  },
  mounted() {
    this.init();
  }
};
</script>

希望本文所述对大家vue.js程序设计有所帮助。

Javascript 相关文章推荐
用JQuery 实现的自定义对话框
Mar 24 Javascript
JavaScript中通过闭包解决只能取得包含函数中任何变量最后一个值的问题
Aug 12 Javascript
JavaScript打字小游戏代码
Dec 26 Javascript
jquery实现弹出层遮罩效果的简单实例
Mar 03 Javascript
如何让你的Lightbox支持滚轮缩放及Base64图片
Dec 04 Javascript
正则表达式替换html元素属性的方法
Nov 26 Javascript
laydate.js日期时间选择插件
Jan 04 Javascript
深入浅析Vue不同场景下组件间的数据交流
Aug 15 Javascript
vue中如何去掉空格的方法实现
Nov 09 Javascript
JS实现求字符串中出现最多次数的字符和次数示例
Jul 05 Javascript
微信小程序wx.navigateTo方法里的events参数使用详情及场景
Jan 07 Javascript
js+css3实现炫酷时钟
Aug 18 Javascript
详解javascript中的Error对象
Apr 25 #Javascript
Vue开发之封装上传文件组件与用法示例
Apr 25 #Javascript
vue2.0自定义指令示例代码详解
Apr 25 #Javascript
Vue开发之封装分页组件与使用示例
Apr 25 #Javascript
Vue注册组件命名时不能用大写的原因浅析
Apr 25 #Javascript
从零到一详聊创建Vue工程及遇到的常见问题
Apr 25 #Javascript
详解vue项目中调用百度地图API使用方法
Apr 25 #Javascript
You might like
php+javascript的日历控件
2009/11/19 PHP
mac下Apache + MySql + PHP搭建网站开发环境
2014/06/02 PHP
ThinkPHP3.1新特性之对Ajax的支持更加完善
2014/06/19 PHP
php array_map使用自定义的函数处理数组中的每个值
2016/10/26 PHP
PHP模拟http请求的方法详解
2016/11/09 PHP
php实现表单提交上传文件功能
2018/05/28 PHP
你所要知道JS(DHTML)中的一些技巧
2007/01/09 Javascript
javascript prototype 原型链
2009/03/12 Javascript
js单词形式的运算符
2014/05/06 Javascript
javascript中使用new与不使用实例化对象的区别
2015/06/22 Javascript
js如何实现淡入淡出效果
2020/11/18 Javascript
JS正则RegExp.test()使用注意事项(不具有重复性)
2016/12/28 Javascript
jQuery Tree Multiselect使用详解
2017/05/02 jQuery
详解VUE 定义全局变量的几种实现方式
2017/06/01 Javascript
vue获取当前激活路由的方法
2018/03/17 Javascript
vue用递归组件写树形控件的实例代码
2018/07/19 Javascript
vue动画打包后失效问题的解决方法
2018/09/18 Javascript
详解一个小实例理解js原型和继承
2019/04/24 Javascript
Node.js 实现远程桌面监控的方法步骤
2019/07/02 Javascript
Node.js创建一个Express服务的方法详解
2020/01/06 Javascript
JavaScript async/await原理及实例解析
2020/12/02 Javascript
[56:18]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#2 MVP.Phx VS Fnatic第二局
2016/03/05 DOTA
[34:44]Liquid vs TNC Supermajor 胜者组 BO3 第二场 6.4
2018/06/05 DOTA
Python实现Linux的find命令实例分享
2017/06/04 Python
Python构建XML树结构的方法示例
2017/06/30 Python
详解 Python中LEGB和闭包及装饰器
2017/08/03 Python
python 将数据保存为excel的xls格式(实例讲解)
2018/05/03 Python
详解python 3.6 安装json 模块(simplejson)
2019/04/02 Python
纯CSS3发光分享按钮的实现教程
2014/09/06 HTML / CSS
纯css3实现图片翻牌特效
2015/03/10 HTML / CSS
美国最大的家庭鞋类零售商之一:Shoe Carnival
2017/10/06 全球购物
澳大利亚当地最大的时装生产商:Cue
2018/08/06 全球购物
护士个人简历自荐信
2013/10/18 职场文书
永远是春天观后感
2015/06/12 职场文书
vue响应式原理与双向数据的深入解析
2021/06/04 Vue.js
MySQL 8.0 驱动与阿里druid版本兼容问题解决
2021/07/01 MySQL