vue实现节点增删改功能


Posted in Javascript onSeptember 26, 2019

本文实例为大家分享了vue实现节点增删改功能的具体代码,供大家参考,具体内容如下

效果:

vue实现节点增删改功能

增删改功能 tree.vue组件代码:

<template>
 <div>
  <div class="all-div" v-if="model.name">
   <div class="itemRow" :style="{ marginLeft:model.level*20+'px' }">
    <span v-show="model.children.length" @click="expandOrCollapse">
     <img v-if="model.isOpen" src="../../assets/img/login_logo.png">
     <img v-else src="../../assets/img/login_logo2.png">
    </span>
    <div class="hover-div" @mouseover="flag=true" @mouseout="flag=false">
     <span @click="jump(model.url)">{{model.name}}</span>
     <span v-show="flag==true" @click="add" style="fontsize:40px;color:red;">+</span>
     <span v-show="flag==true" @click="remove(model)"><img src="../../assets/img/del.png"></span>
     <span v-show="flag==true" @click="edit" style="color:green;">修改</span>
     <!--<span class="asce" v-show="model.children.length" @click="orderAsce">↑</span>
    <span class="desc" v-show="model.children.length" @click="orderDesc">↓</span>-->
    </div>
 
   </div>
  </div>
  <navigation v-if="model.isOpen" v-for="row in model.children" :key="row.name" :model="row" :length="model.children.length"></navigation>
 </div>
</template>
 
<script>
 export default {
  name: 'navigation',
  // 使用`编辑树`组件需要传递的数据
  props: {
   // 编辑树对象
   model: {
    type: Object
   },
 
   length: {
    type: Number
   }
  },
 
  data () {
   return {
    flag:false
 
   }
  },
 
  methods: {
   // 添加节点
   add(){
    let val = prompt("请输入要添加的节点的名称:");
    if (val) {
     this.model.children.push({
      name: val,
      level: this.model.level + 1,
      isOpen: true,
      children: []
     });
    }
 
   },
 
   // 移除节点
   remove(model){
    var self = this;
    alert('确认删除吗?');
    if (self.$parent.model) {
     self.$parent.model.children.forEach((item, index) => {
      if (item.name == model.name) {
      self.$parent.model.children.splice(index, 1);
     }
    })
    }
   },
 
   // 编辑节点名称
   edit(){
    var self = this;
    let rename = prompt('请输入修改后的节点名称:');
    // 使用正则进行重命名的差错校验
    if (!rename.length) {
     alert('请输入正确的节点名称');
     return;
    }
    self.model.name = rename;
   },
 
   /**
    * 展开/收起功能
    */
   expandOrCollapse(){
    this.model.isOpen = !this.model.isOpen;
   },
   jump(url){
    var self = this;
    self.$router.push({path:url})
   }
 
   /*// 升序排列
    orderAsce(){
    function compare(property) {
    return function (a, b) {
    var value1 = a[property];
    var value2 = b[property];
    return value1 - value2;
    }
    }
    this.model.children.sort(compare('name'));
    },
    // 降序排列
    orderDesc(){
    this.orderAsce();
    this.model.children.reverse();
    }*/
  },
 }
</script>
 
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
 .all-div{
  margin-left: 6%;
 
 }
 .itemRow {
  text-align: left;
  padding-top: 2%;
  padding-bottom: 2%;
 }
 .itemRow span,.itemRow img{
  cursor: pointer;
 }
 .itemRow span{
  font-size: 1.1vw;
 }
 .hover-div{
  display:inline-block;
 }
 
 
</style>

父组件中引用代码:

<template>
 <div id="all">
  <tree :model="root" :length="length"></tree>
 </div>
</template>
<style scoped>
 #all{
  width:100%;
  height: 100%;
 }
 
</style>
<script>
 import tree from './tree.vue'
 export default{
  data(){
   return{
    root:{
     name:"根节点",
     level:0,
     isOpen:true,
     children:[
      {
       name:"节点1",
       level:1,
       url:"/homePage/middle/navLeftFirst",
       isOpen:false,
       children:[
        {
         name:"节点1-1",
         level:2,
         isOpen:true,
         children:[]
        },
        {
         name:"节点1-2",
         level:2,
         isOpen:true,
         children:[]
        }
       ]
      },
      {
       name:"节点2",
       level:1,
       url:"/homePage/middle/navLeftSecond",
       isOpen:false,
       children:[
        {
         name:"节点2-1",
         level:2,
         isOpen:true,
         children:[]
        },
        {
         name:"节点2-2",
         level:2,
         isOpen:true,
         children:[]
        }
       ]
 
      }
     ]
    },
    length:2
   }
  },
  components:{
   tree
  }
 }
</script>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
一段好玩的JavaScript代码
Dec 01 Javascript
IE6下js通过css隐藏select的一个bug
Aug 16 Javascript
JS创建自定义表格具体实现
Feb 11 Javascript
跨域资源共享 CORS 详解
Apr 26 Javascript
深入理解Angularjs向指令传递数据双向绑定机制
Dec 31 Javascript
jquery实现数字输入框
Feb 22 Javascript
微信小程序6位或多位验证码密码输入框功能的实现代码
May 29 Javascript
JS实现监控微信小程序的原理
Jun 15 Javascript
解决vue js IOS H5focus无法自动弹出键盘的问题
Aug 30 Javascript
VUE2.0 ElementUI2.0表格el-table自适应高度的实现方法
Nov 28 Javascript
vue中el-input绑定键盘按键(按键修饰符)
Jul 22 Javascript
详细聊聊浏览器是如何看闭包的
Nov 11 Javascript
浅谈layui里的上传控件问题
Sep 26 #Javascript
layui实现多图片上传并限制上传的图片数量
Sep 26 #Javascript
layui 阻止图片上传的实例(before方法)
Sep 26 #Javascript
layui 上传图片 返回图片地址的方法
Sep 26 #Javascript
vue仿ios列表左划删除
Sep 26 #Javascript
微信小程序 多行文本显示...+显示更多按钮和收起更多按钮功能
Sep 26 #Javascript
vue实现百度搜索功能
Dec 28 #Javascript
You might like
利用js调用后台php进行数据处理原码
2006/10/09 PHP
php实现点击可刷新验证码
2015/11/07 PHP
PHP获取指定时间段之间的 年,月,天,时,分,秒
2016/06/05 PHP
thinkPHP实现多字段模糊匹配查询的方法
2016/12/01 PHP
OAuth认证协议中的HMACSHA1加密算法(实例)
2017/10/25 PHP
Laravel 自动生成验证的实例讲解:login / logout
2019/10/14 PHP
深入解析PHP底层机制及相关原理
2020/12/11 PHP
基于jsTree的无限级树JSON数据的转换代码
2010/07/27 Javascript
使用jQuery动态加载js脚本文件的方法
2014/04/03 Javascript
在linux中使用包管理器安装node.js
2015/03/13 Javascript
浅谈Sizzle的“编译原理”
2015/04/14 Javascript
jQuery实现Flash效果上下翻动的中英文导航菜单代码
2015/09/22 Javascript
JavaScript知识点总结(六)之JavaScript判断变量数据类型
2016/05/31 Javascript
Vue.js实现模拟微信朋友圈开发demo
2017/04/20 Javascript
Node.JS文件系统解析实例详解
2017/05/15 Javascript
p5.js入门教程之图片加载
2018/03/20 Javascript
vue打包相关细节整理(小结)
2018/09/28 Javascript
跟老齐学Python之让人欢喜让人忧的迭代
2014/10/02 Python
以windows service方式运行Python程序的方法
2015/06/03 Python
解决Python传递中文参数的问题
2015/08/04 Python
Python heapq使用详解及实例代码
2017/01/25 Python
LRUCache的实现原理及利用python实现的方法
2017/11/21 Python
Python实现屏幕截图的两种方式
2018/02/05 Python
使用django-crontab实现定时任务的示例
2018/02/26 Python
python数字图像处理实现直方图与均衡化
2018/05/04 Python
Python 脚本获取ES 存储容量的实例
2018/12/27 Python
详解pyppeteer(python版puppeteer)基本使用
2019/06/12 Python
Python如何实现爬取B站视频
2020/05/20 Python
HTML5之SVG 2D入门1—SVG(可缩放矢量图形)概述
2013/01/30 HTML / CSS
微软新西兰官方网站:Microsoft New Zealand
2018/08/17 全球购物
美国修容界大佬创建的个人美妆品牌:Kevyn Aucoin Beauty
2018/12/12 全球购物
党员干部2014全国两会学习心得体会
2014/03/10 职场文书
演讲比赛策划方案
2014/06/11 职场文书
学生违纪检讨书200字
2014/10/21 职场文书
红旗渠导游词
2015/02/09 职场文书
MySQL 8.0 之不可见列的基本操作
2021/05/20 MySQL