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 相关文章推荐
Firefox outerHTML实现代码
Jun 04 Javascript
【经验总结】编写JavaScript代码时应遵循的14条规律
Jun 20 Javascript
jQGrid Table操作列中点击【操作】按钮弹出按钮层的实现代码
Dec 05 Javascript
vue-cli+webpack在生成的项目中使用bootstrap实例代码
May 26 Javascript
解决vue+element 键盘回车事件导致页面刷新的问题
Aug 25 Javascript
JavaScript学习笔记之基于定时器实现图片无缝滚动功能详解
Jan 09 Javascript
微信小程序学习笔记之文件上传、下载操作图文详解
Mar 29 Javascript
微信小程序实现的一键复制功能示例
Apr 24 Javascript
jQuery实现的上拉刷新功能组件示例
May 01 jQuery
Javascript查看大图功能代码实现
May 07 Javascript
构建一个JavaScript插件系统
Oct 20 Javascript
通过实例解析js可枚举属性与不可枚举属性
Dec 02 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
基于Zend的Captcha机制的应用
2013/05/02 PHP
CI框架Session.php源码分析
2014/11/03 PHP
PHP数组生成XML格式数据的封装类实例
2016/11/10 PHP
js屏蔽鼠标键盘(右键/Ctrl+N/Shift+F10/F11/F5刷新/退格键)
2013/01/24 Javascript
如何用js控制frame的隐藏或显示的解决办法
2013/03/20 Javascript
Bootstrap框架动态生成Web页面文章内目录的方法
2016/05/12 Javascript
BootStrap3学习笔记(一)之网格系统
2016/05/20 Javascript
jQuery插件实现图片轮播特效
2016/06/16 Javascript
jQuery EasyUI Tab 选项卡问题小结
2016/08/16 Javascript
JavaScript模板引擎Template.js使用详解
2016/12/15 Javascript
js实现自动轮换选项卡
2017/01/13 Javascript
Web前端框架Angular4.0.0 正式版发布
2017/03/28 Javascript
jQuery实现html双向绑定功能示例
2017/10/09 jQuery
nodejs实现连接mongodb数据库的方法示例
2018/03/15 NodeJs
Vue实现动态添加或者删除对象和对象数组的操作方法
2018/09/21 Javascript
javascript实现日历效果
2019/06/17 Javascript
JavaScript生成随机验证码代码实例
2019/09/28 Javascript
[01:13]2015国际邀请赛线下观战现场
2015/08/08 DOTA
Python 执行字符串表达式函数(eval exec execfile)
2014/08/11 Python
Python中的闭包详细介绍和实例
2014/11/21 Python
python使用matplotlib库生成随机漫步图
2018/08/27 Python
pycharm在调试python时执行其他语句的方法
2018/11/29 Python
在Pycharm中调试Django项目程序的操作方法
2019/07/17 Python
Django logging配置及使用详解
2019/07/23 Python
解决 jupyter notebook 回车换两行问题
2020/04/15 Python
jupyternotebook 撤销删除的操作方式
2020/04/17 Python
美特斯邦威官方商城:邦购网
2016/10/13 全球购物
美国在线和移动免费会员制批发零售商:Boxed(移动端的Costco)
2020/01/02 全球购物
Oasis服装官网:时尚女装在线
2020/07/09 全球购物
英国发展最快的在线超市之一:Click Marketplace
2021/02/15 全球购物
求职信范文怎么写
2014/01/29 职场文书
领导班子个人对照检查材料(群众路线)
2014/09/26 职场文书
公司感谢信范文
2015/01/22 职场文书
同学会邀请函模板
2015/01/30 职场文书
民事申诉状范本
2015/05/20 职场文书
街道办残联2016年助残日活动总结
2016/04/01 职场文书