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学习笔记之 函数篇(一) : 函数声明和函数表达式
Jun 24 Javascript
jQuery实现dialog设置focus焦点的方法
Jun 10 Javascript
Node.js中JavaScript操作MySQL的常用方法整理
Mar 01 Javascript
深入理解js中this的用法
May 28 Javascript
仿Angular Bootstrap TimePicker创建分钟数-秒数的输入控件
Jul 01 Javascript
JavaScript实现同一个页面打开多张图片
Dec 29 Javascript
ES6新特性之变量和字符串用法示例
Apr 01 Javascript
微信小程序实战之登录页面制作(5)
Mar 30 Javascript
关于vue.js组件数据流的问题
Jul 26 Javascript
微信小程序实现红包雨功能
Jul 11 Javascript
Vue与Node.js通过socket.io通信的示例代码
Jul 25 Javascript
jQuery实现简单弹幕效果
Nov 28 jQuery
浅谈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中逗号与点号的区别
2013/08/05 PHP
JavaScript 联动的无限级封装类,数据采用非Ajax方式,随意添加联动
2010/06/29 Javascript
JavaScript 内置对象属性及方法集合
2010/07/04 Javascript
JavaScript模板入门介绍
2012/09/26 Javascript
js实现黑色简易的滑动门网页tab选项卡效果
2015/08/31 Javascript
jquery插件jquery.confirm弹出确认消息
2015/12/22 Javascript
Ionic如何创建APP项目
2016/06/03 Javascript
微信小程序 天气预报开发实例代码源码
2017/01/20 Javascript
关于Sequelize连接查询时inlude中model和association的区别详解
2017/02/27 Javascript
javascript数据结构中栈的应用之符号平衡问题
2017/04/11 Javascript
JS 实现缓存算法的示例(FIFO/LRU)
2018/03/20 Javascript
Node.js利用console输出日志文件的方法示例
2018/04/27 Javascript
Vue中props的使用详解
2018/06/15 Javascript
详解VUE单页应用骨架屏方案
2019/01/17 Javascript
使用JS判断页面是首次被加载还是刷新
2019/05/26 Javascript
Python中一行和多行import模块问题
2018/04/01 Python
APIStar:一个专为Python3设计的API框架
2018/09/26 Python
Python查找最长不包含重复字符的子字符串算法示例
2019/02/13 Python
Python判断对象是否为文件对象(file object)的三种方法示例
2019/04/26 Python
Python如何使用Gitlab API实现批量的合并分支
2019/11/27 Python
Python对Tornado请求与响应的数据处理
2020/02/12 Python
python GUI库图形界面开发之PyQt5打开保存对话框QFileDialog详细使用方法与实例
2020/02/27 Python
Django实现图片上传功能步骤解析
2020/04/22 Python
五分钟带你搞懂python 迭代器与生成器
2020/08/30 Python
利用CSS3实现动态的二级三级菜单效果实例源码
2017/01/04 HTML / CSS
Free People中国官网:波西米亚风格女装服饰
2016/08/30 全球购物
美国最古老的精致书写工具制造商:A.T. Cross(高仕)
2018/01/30 全球购物
Pam & Gela官网:美国性感前卫女装品牌
2018/07/19 全球购物
门诊挂号室室长岗位职责
2013/11/27 职场文书
大学毕业生文采飞扬的自我鉴定
2013/12/03 职场文书
婚前保证书
2014/04/29 职场文书
导游词怎么写
2015/02/04 职场文书
产品调价通知函
2015/04/20 职场文书
基于Redis结合SpringBoot的秒杀案例详解
2021/10/05 Redis
CSS中妙用 drop-shadow 实现线条光影效果
2021/11/11 HTML / CSS
vue修饰符.capture和.self的区别
2022/04/22 Vue.js