ElementUI中el-tree节点的操作的实现


Posted in Javascript onFebruary 27, 2020

其实tree的有些方法用起来是很方便的,
this.$refs.tree.getCheckedKeys();这个原生态的方法。官方文档上说的是,返回一个数组。有了这个方法,我们就可以得到选中的每个节点的id,拿到了id,那所有的问题就迎刃而解了。
废话不多说,直接上代码

html

<div id="app">
  <el-row>
    <el-button @click="checkedKeys">得到节点id</el-button>
    <el-button @click="addNode">添加节点</el-button>
    <el-button @click="checkedKeys">修改节点</el-button>
    <el-button @click="deleteNode">删除节点</el-button>
    <br/>
    <br/>

    <el-tree
         ref="tree"
         :data="treeList"
         :props="defaultProps"
         @node-click="handleNodeClick"
         show-checkbox=true
         node-key="id"
         :check-strictly="true"
        >
    </el-tree>
    <el-input>输入框</el-input>
    <el-dialog title="添加"
         :visible.sync="dialogVisible"
        >
      <el-form ref="form">
        <el-form-item label="节点父类型">
        <el-select placeholder="请选择要添加节点的父节点" v-model="treeNode.parentId" @change="selectChange" >
          <el-option label="根节点" :value="0"></el-option>
          <el-option v-for="item in treeListData" :label="item.categoryName" :value="item.nodeId"></el-option>
        </el-select>
      </el-form-item>
          <el-form-item label="节点名称">
            <el-input placeholder="请输入节点名称" v-model="treeNode.categoryName" style="width: 220px"></el-input>
          </el-form-item>
    </el-form>

      <span>
        <el-button @click="cancleSaveNode">
          取消
        </el-button>
        <el-button @click="saveNode">
          确定
        </el-button>
      </span>

    </el-dialog>

  </el-row>

</div>

js代码

<script type="text/javascript">


  var _treeNode={
    nodeId:0,
    categoryName:"",
    parentId:0
  }

  var app = new Vue({
    el:'#app',
    data:{
      treeNode:_treeNode,
      treeList:[],
      treeListData:[], // 无层级结构节点数据
      defaultProps:{
        children: 'childList',
        label: 'name'
        /* label: 'categoryName'*/
      },
      dialogVisible:false, // 对话框,默认不打开
      api:{
        treeDataList:"/category/treeList.do",  // 得到节点数据,无层级结构 GET
        saveTreeNode:"/category/saveTreeNode.do",  // 得到节点数据,无层级结构 GET
        deleteTreeNode:"/category/deleTreeNode.do",
      }
    },
    methods: {
      cateListFunction: function () {
        $.ajax({
          type: "get",
          url: "/category/cateList.do",
          success: function (result) {
            app.cateList = result;
            app.treeList=result;
          }, error: function (result) {
          }
        });
      },
      // 点击节点名称触发的事件
      handleNodeClick: function (data) {
        alert(data.id);
        console.log(data);
      },
      // 获得选中的节点的key
      checkedKeys:function (data) {
        alert(JSON.stringify(this.$refs.tree.getCheckedKeys()));
      },
      // 添加节点查询所有节点的方法
      addNode:function () {
        // 查询所有节点数据无层级结构
        app.getTreeNode();
        app.dialogVisible=true;
      },
      // 保存节点
      saveNode:function () {
       //alert(app.treeNode.categoryName+app.treeNode.parentId);
       axios.post(app.api.saveTreeNode,app.treeNode).then(function (resule) {
         app.dialogVisible=false;
         app.treeNode.parentId=0;
         app.treeNode.categoryName="";
         app.cateListFunction();
       });

      },
      cancleSaveNode:function () {
        app.dialogVisible=false;
        app.treeNode.parentId=0;
        app.treeNode.categoryName="";

      },
      // 下拉框选中事件
      selectChange:function (val) {
        // select控件的option绑定的值为节点的id,我们将值绑定在要添加的元素的父id
        //alert("得到节点类型"+val);
      },
      // 批量删除节点(若有子节点则不予删除)
      deleteNode:function () {
        app.getTreeNode();
        var str=[];
        str =this.$refs.tree.getCheckedKeys();
         if(str.length<=0){ // 因为vue返回的是选中的key的数组
                    // ,如果没有选择任何元素返回 "[]",这是两个元素,所以我们判断长度为2时,为空
           app.$message.error("请至少选择一个节点");
           return ;
         }
        for(var i in str){
          for(var j in app.treeListData){
            if(app.treeListData[j].parentId == str[i]){
              app.$message.error("父节点不可被删除");
              return;
            }
          }
        }
        axios.post(this.api.deleteTreeNode,str).then(function (result) {
          app.$message({message: '删除成功', type: 'success'});
          app.getTreeNode();
          app.cateListFunction();
        });

      },getTreeNode:function () {
        // 查询所有节点数据无层级结构
        axios.get(this.api.treeDataList)
          .then(
            function(result){
              // vue给我们封装的得,我们所得到的数据在返回的对象的data属性里
              app.treeListData=result.data;
            });
      }

    },
      created: function () {
        this.getTreeNode();
        this.cateListFunction();
      }
  });
</script>

controller

/**
   * 保存节点
   */
  @RequestMapping("/saveTreeNode.do")
  @ResponseBody
  public void saveTreeNode(@RequestBody TbCategory category){
    System.out.println(category.getCategoryName() +"------" +category.getParentId());
    categoryService.insert(category);
  }


  @RequestMapping("/deleTreeNode.do")
  @ResponseBody
  public void deleTreeNode(@RequestBody String str){

    System.out.println(str);
    String [] strIds = str.substring(1,str.length()-1).split(",");
    for(int i =0;i<strIds.length;i++){
      categoryService.delete(Long.valueOf(strIds[i])); // 1,2
    }
  }

以上代码真的没有什么好解释的,大家直接按照我的代码,就不会有问题了

截图:

ElementUI中el-tree节点的操作的实现

ElementUI中el-tree节点的操作的实现

ElementUI中el-tree节点的操作的实现

到此这篇关于ElementUI中el-tree节点的操作的实现的文章就介绍到这了,更多相关ElementUI el-tree节点内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
JQuery扩展插件Validate—4设置错误提示的样式
Sep 05 Javascript
JavaScript内核之基本概念
Oct 21 Javascript
jquery使用ColorBox弹出图片组浏览层实例演示
Mar 14 Javascript
jquery实现简单文字提示效果
Dec 02 Javascript
jQuery AjaxUpload 上传图片代码
Feb 02 Javascript
Js查找字符串中出现次数最多的字符及个数实例解析
Sep 05 Javascript
JavaScript实现使用Canvas绘制图形的基本教程
Oct 27 Javascript
Vue Cli与BootStrap结合实现表格分页功能
Aug 18 Javascript
静态页面实现 include 引入公用代码的示例
Sep 25 Javascript
laydate时间日历插件使用方法详解
Nov 14 Javascript
详解Webpack如何引入CDN链接来优化编译后的体积
Jun 21 Javascript
webpack 处理CSS资源的实现
Sep 27 Javascript
element el-tree组件的动态加载、新增、更新节点的实现
Feb 27 #Javascript
element-ui table行点击获取行索引(index)并利用索引更换行顺序
Feb 27 #Javascript
微信小程序录音实现功能并上传(使用node解析接收)
Feb 26 #Javascript
BootStrap前端框架使用方法详解
Feb 26 #Javascript
原生javascript制作贪吃蛇小游戏的方法分析
Feb 26 #Javascript
javascript 数组精简技巧小结
Feb 26 #Javascript
vue父子模板传值问题解决方法案例分析
Feb 26 #Javascript
You might like
让PHP支持断点续传的源码
2010/05/16 PHP
php 字符串替换的方法
2012/01/10 PHP
PHP中使用GD库创建圆形饼图的例子
2014/11/19 PHP
thinkphp3.x中display方法及show方法的用法实例
2016/05/19 PHP
laravel-admin 中列表筛选方法
2019/10/03 PHP
PHP如何通过带尾指针的链表实现'队列'
2020/10/22 PHP
使用javascript实现有效时间的控制,并显示将要过期的时间
2014/01/02 Javascript
Jquery操作js数组及对象示例代码
2014/05/11 Javascript
JavaScript实现页面跳转的几种常用方式
2015/11/28 Javascript
KnockoutJS 3.X API 第四章之事件event绑定
2016/10/10 Javascript
Vue的百度地图插件尝试使用
2017/09/06 Javascript
JavaScript基于面向对象实现的猜拳游戏
2018/01/03 Javascript
nodejs爬虫初试superagent和cheerio
2018/03/05 NodeJs
JS实现调用本地摄像头功能示例
2018/05/18 Javascript
使用js在layui中实现上传图片压缩
2019/06/18 Javascript
JS实现给数组对象排序的方法分析
2019/06/24 Javascript
微信小程序点击保存图片到本机功能
2019/12/13 Javascript
Angular进行简单单元测试的实现方法实例
2020/08/16 Javascript
jQuery-App输入框实现实时搜索
2020/11/19 jQuery
简单解决Python文件中文编码问题
2015/11/22 Python
Python 字典与字符串的互转实例
2017/01/13 Python
详解python使用pip安装第三方库(工具包)速度慢、超时、失败的解决方案
2018/12/02 Python
Pandas_cum累积计算和rolling滚动计算的用法详解
2019/07/04 Python
python爬虫增加访问量的方法
2019/08/22 Python
在pytorch中对非叶节点的变量计算梯度实例
2020/01/10 Python
Python模块_PyLibTiff读取tif文件的实例
2020/01/13 Python
python 装饰器功能与用法案例详解
2020/03/06 Python
Python爬取YY评级分数并保存数据实现过程解析
2020/06/01 Python
把Anaconda中的环境导入到Pycharm里面的方法步骤
2020/10/30 Python
利用HTML5画出一个坦克的形状具体实现代码
2013/06/20 HTML / CSS
a标签下载链接的简单实现
2016/09/13 HTML / CSS
《千年梦圆在今朝》教学反思
2014/02/24 职场文书
英文升职感谢信
2015/01/23 职场文书
寻衅滋事罪辩护词
2015/05/21 职场文书
如何利用STAR法则制作留学文书?
2019/08/26 职场文书
教你怎么用Python处理excel实现自动化办公
2021/04/30 Python