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 相关文章推荐
IE6-IE9不支持table.innerHTML的解决方法分享
Sep 14 Javascript
jquery1.10给新增元素绑定事件的方法
Mar 06 Javascript
相册展示PhotoSwipe.js插件实现
Aug 25 Javascript
JavaScript实现汉字转换为拼音的库文件示例
Dec 22 Javascript
详解百度百科目录导航树小插件
Jan 08 Javascript
vue router学习之动态路由和嵌套路由详解
Sep 21 Javascript
AngularJS模糊查询功能实现代码(过滤内容下拉菜单排序过滤敏感字符验证判断后添加表格信息)
Oct 24 Javascript
vue2.0 根据状态值进行样式的改变展示方法
Mar 13 Javascript
JS实现把一个页面层数据传递到另一个页面的两种方式
Aug 13 Javascript
vue实现多级菜单效果
Oct 19 Javascript
Jquery让form表单异步提交代码实现
Nov 14 jQuery
JavaScript与JQuery框架基础入门教程
Jul 15 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
PHP新手上路(九)
2006/10/09 PHP
PHP 写文本日志实现代码
2010/05/18 PHP
LotusPhp笔记之:Cookie组件的使用详解
2013/05/06 PHP
示例详解Laravel重置密码代码重构
2016/08/10 PHP
分享一个自己写的简单的javascript分页组件
2015/02/15 Javascript
jQuery EasyUI框架中的Datagrid数据表格组件结构详解
2016/06/09 Javascript
购物车前端开发(jQuery和bootstrap3)
2016/08/27 Javascript
JavaScript中定时控制Throttle、Debounce和Immediate详解
2016/11/17 Javascript
Web前端框架bootstrap实战【第一次接触使用】
2016/12/28 Javascript
JS查找英文文章中出现频率最高的单词
2017/03/20 Javascript
React进阶学习之组件的解耦之道
2017/08/07 Javascript
jquery animate动画持续运动的实例
2017/11/29 jQuery
JS常见DOM节点操作示例【创建 ,插入,删除,复制,查找】
2018/05/14 Javascript
Element Input组件分析小结
2018/10/11 Javascript
详解如何在vscode里面调试js和node.js的方法步骤
2018/12/24 Javascript
JS面向对象之多选框实现
2020/01/17 Javascript
微信小程序实现多张图片上传功能
2020/11/18 Javascript
Python基于回溯法子集树模板解决野人与传教士问题示例
2017/09/11 Python
Python实现对一个函数应用多个装饰器的方法示例
2018/02/09 Python
Python txt文件加入字典并查询的方法
2019/01/15 Python
Pycharm+Scrapy安装并且初始化项目的方法
2019/01/15 Python
Python3使用xml.dom.minidom和xml.etree模块儿解析xml文件封装函数的方法
2019/09/23 Python
python 实现return返回多个值
2019/11/19 Python
Python实现爬取网页中动态加载的数据
2020/08/17 Python
维珍澳洲航空官网:Virgin Australia
2017/09/08 全球购物
Casadei卡萨蒂官网:意大利奢侈鞋履品牌
2017/10/28 全球购物
Ralph Lauren拉夫·劳伦美国官网:带有浓郁美国气息的高品味时装品牌
2017/11/01 全球购物
吉尔德利巧克力公司:Ghirardelli Chocolate Company
2019/03/27 全球购物
工程总经理工作职责
2013/12/09 职场文书
大四本科生的自我评价
2013/12/30 职场文书
党员群众路线对照检查材料
2014/08/31 职场文书
2015年党员干部承诺书
2015/01/21 职场文书
欠条范文
2015/07/03 职场文书
利用Python第三方库实现预测NBA比赛结果
2021/06/21 Python
Python可变集合和不可变集合的构造方法大全
2021/12/06 Python
React更新渲染原理深入分析
2022/12/24 Javascript