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 相关文章推荐
JS中的this变量的使用介绍
Oct 21 Javascript
js showModalDialog 弹出对话框的简单实例(子窗体)
Jan 07 Javascript
js控制href内容的连接内容的变化示例
Apr 30 Javascript
javascript实现类似java中getClass()得到对象类名的方法
Jul 27 Javascript
多功能jQuery树插件zTree实现权限列表简单实例
Jul 12 Javascript
Angular.JS中指令ng-if的注意事项小结
Jun 21 Javascript
浅谈angular.js跨域post解决方案
Aug 30 Javascript
详解http访问解析流程原理
Oct 18 Javascript
浅谈Webpack自动化构建实践指南
Dec 18 Javascript
JQuery Ajax执行跨域请求数据的解决方案
Dec 10 jQuery
JS正则表达式常见函数与用法小结
Apr 13 Javascript
javascript实现简易计算器功能
Sep 23 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
用Simple Excel导出xls实现方法
2012/12/06 PHP
自定义php类(查找/修改)xml文档
2013/03/26 PHP
php 字符串中的\n换行符无效、不能换行的解决方法
2014/04/02 PHP
PHP面向对象程序设计之类常量用法实例
2014/08/20 PHP
php的常量和变量实例详解
2017/06/27 PHP
tp5.1 框架查询表达式用法详解
2020/05/25 PHP
jQuery live( type, fn ) 委派事件实现
2009/10/11 Javascript
jquery实现的带缩略图的焦点图片切换(自动播放/响应鼠标动作)
2013/01/23 Javascript
用JavaScript实现动画效果的方法
2013/07/20 Javascript
javascript模拟实现C# String.format函数功能代码
2013/11/25 Javascript
jQuery.position()方法获取不到值的安全替换方法
2015/03/13 Javascript
Bootstrap每天必学之媒体对象
2015/11/30 Javascript
jQuery事件的绑定、触发、及监听方法简单说明
2016/05/10 Javascript
Vue封装Swiper实现图片轮播效果
2018/02/06 Javascript
搭建vue开发环境
2018/07/19 Javascript
[00:32]2018DOTA2亚洲邀请赛Newbee出场
2018/04/03 DOTA
Python 字符串操作方法大全
2014/03/11 Python
Python实现国外赌场热门游戏Craps(双骰子)
2015/03/31 Python
Python subprocess模块详细解读
2018/01/29 Python
python生成tensorflow输入输出的图像格式的方法
2018/02/12 Python
python的dataframe转换为多维矩阵的方法
2018/04/11 Python
python3基于TCP实现CS架构文件传输
2018/07/28 Python
岗位职责的含义
2013/11/17 职场文书
大学生工作推荐信范文
2013/12/02 职场文书
《小山羊和小灰兔》教学反思
2014/02/19 职场文书
美术教学感言
2014/02/22 职场文书
幼儿园毕业寄语
2014/04/03 职场文书
高考寄语大全
2014/04/08 职场文书
南京青奥会口号
2014/06/12 职场文书
2015欢度元旦标语口号
2014/12/09 职场文书
2015年销售人员工作总结
2015/04/07 职场文书
天鹅湖观后感
2015/06/09 职场文书
传单、海报早OUT了,另类传单营销方案送给你!
2019/07/15 职场文书
用Python简陋模拟n阶魔方
2021/04/17 Python
CentOS MySql8 远程连接实战
2022/04/19 MySQL
Golang gRPC HTTP协议转换示例
2022/06/16 Golang