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 相关文章推荐
发现的以前不知道的函数
Sep 19 Javascript
jQuery中事件对象e的事件冒泡用法示例介绍
Apr 25 Javascript
使用AngularJS创建单页应用的编程指引
Jun 19 Javascript
jQuery EasyUI 菜单与按钮之创建简单的菜单和链接按钮
Nov 18 Javascript
JavaScript使用Range调色及透明度实例
Sep 25 Javascript
浅谈Node.js轻量级Web框架Express4.x使用指南
May 03 Javascript
axios进阶实践之利用最优雅的方式写ajax请求
Dec 20 Javascript
react中实现搜索结果中关键词高亮显示
Jul 31 Javascript
webpack4.0 入门实践教程
Oct 08 Javascript
uni app仿微信顶部导航条功能
Sep 17 Javascript
javascript实现简单搜索功能
Mar 26 Javascript
对vuex中store和$store的区别说明
Jul 24 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缩略图等比例无损压缩,可填充空白区域补充色
2011/06/10 PHP
php多进程应用场景实例详解
2019/07/22 PHP
分享20款好玩的jQuery游戏
2011/04/17 Javascript
JS高级拖动技术 setCapture,releaseCapture
2011/07/31 Javascript
基于JavaScript 数据类型之Boolean类型分析介绍
2013/04/19 Javascript
四种参数传递的形式——URL,超链接,js,form表单
2015/07/24 Javascript
js实现字符串和数组之间相互转换操作
2016/01/12 Javascript
ui组件之input多选下拉实现方法(带有搜索功能)
2016/07/14 Javascript
js改变html的原有内容实现方法
2016/10/05 Javascript
解决同一页面中两个iframe互相调用jquery,js函数的方法
2016/12/12 Javascript
js实现分页功能
2017/05/24 Javascript
Vue监听事件实现计数点击依次增加的方法
2018/09/26 Javascript
JavaScript实现选项卡效果的分析及步骤
2019/04/16 Javascript
Vue 使用计时器实现跑马灯效果的实例代码
2019/07/11 Javascript
Emberjs 通过 axios 下载文件的方法
2019/09/03 Javascript
es6中new.target的作用和使用场景简单示例分析
2020/03/14 Javascript
Vue全局使用less样式,组件使用全局样式文件中定义的变量操作
2020/10/21 Javascript
[02:08]2018年度CS GO枪械皮肤设计大赛优秀作者-完美盛典
2018/12/16 DOTA
python中string模块各属性以及函数的用法介绍
2016/05/30 Python
Python中的并发处理之asyncio包使用的详解
2018/04/03 Python
利用Python如何批量更新服务器文件
2018/07/29 Python
Python骚操作之动态定义函数
2019/03/26 Python
Python生成MD5值的两种方法实例分析
2019/04/26 Python
Python如何使用paramiko模块连接linux
2020/03/18 Python
简述python Scrapy框架
2020/08/17 Python
Python字符串三种格式化输出
2020/09/17 Python
python打包多类型文件的操作方法
2020/09/21 Python
pytorch简介
2020/11/11 Python
一家专门做特卖的网站:唯品会
2016/10/09 全球购物
师范应届毕业生自荐信
2013/11/18 职场文书
电子商务专业应届生求职信
2014/05/28 职场文书
小学家长学校培训材料
2014/08/24 职场文书
综合办公室岗位职责
2015/04/11 职场文书
财务人员廉洁自律心得体会
2016/01/13 职场文书
2016年五一国际劳动节活动总结
2016/04/06 职场文书
MySQL创建管理子分区
2022/04/13 MySQL