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 相关文章推荐
使用Jquery来实现可以输入值的下拉选单 雏型
Dec 06 Javascript
深入理解JavaScript系列(14) 作用域链介绍(Scope Chain)
Apr 12 Javascript
JavaScript中的索引数组、关联数组和静态数组、动态数组讲解
Nov 08 Javascript
JS实现判断碰撞的方法
Feb 11 Javascript
JQuery中clone方法复制节点
May 18 Javascript
分享一个插件实现水珠自动下落效果
Jun 01 Javascript
JS简单生成两个数字之间随机数的方法
Aug 03 Javascript
Javascript函数中的arguments.callee用法实例分析
Sep 16 Javascript
Vue2学习笔记之请求数据交互vue-resource
Feb 23 Javascript
HTML5+JS+JQuery+ECharts实现异步加载问题
Dec 16 jQuery
使用webpack/gulp构建TypeScript项目的方法示例
Dec 18 Javascript
javascript 内存模型实例详解
Apr 18 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 register_globals 值为on与off的理解
2013/09/26 PHP
使用PHP如何实现高效安全的ftp服务器(一)
2015/12/20 PHP
php中array_unshift()修改数组key注意事项分析
2016/05/16 PHP
PHPStudy下如何为Apache安装SSL证书的方法步骤
2019/01/23 PHP
PHP常用工具函数小结【移除XSS攻击、UTF8与GBK编码转换等】
2019/04/27 PHP
捕获关闭窗口的脚本
2009/01/10 Javascript
比较搞笑的js陷阱题
2010/02/07 Javascript
jQuery层次选择器选择元素使用介绍
2013/04/18 Javascript
FireBug 调试JS入门教程 如何调试JS
2013/12/23 Javascript
引用外部脚本时script标签关闭的写法
2014/01/20 Javascript
jQuery实现鼠标可拖动调整表格列宽度
2014/05/26 Javascript
举例说明如何为JavaScript的方法参数设置默认值
2015/11/17 Javascript
学习JavaScript事件流和事件处理程序
2016/01/25 Javascript
AngularJS 遇到的小坑与技巧小结
2016/06/07 Javascript
RequireJS 依赖关系的实例(推荐)
2017/01/21 Javascript
十大热门的JavaScript框架和库
2017/03/21 Javascript
JS图片预加载插件详解
2017/06/21 Javascript
vue父组件中获取子组件中的数据(实例讲解)
2017/09/27 Javascript
JQuery选中select组件被选中的值方法
2018/03/08 jQuery
vue-cli 组件的导入与使用教程详解
2018/04/11 Javascript
react-navigation之动态修改title的内容
2018/09/26 Javascript
javascript中的相等操作符(==与===区别)
2019/12/21 Javascript
解决基于 keep-alive 的后台多级路由缓存问题
2020/12/23 Javascript
如何封装Vue Element的table表格组件
2021/02/06 Vue.js
[01:08]2014DOTA2展望TI 剑指西雅图LGD战队专访
2014/06/30 DOTA
Python contextlib模块使用示例
2015/02/18 Python
Redis使用watch完成秒杀抢购功能的代码
2018/05/07 Python
一篇文章弄懂Python中的可迭代对象、迭代器和生成器
2019/08/12 Python
Python tkinter模版代码实例
2020/02/05 Python
Django搭建项目实战与避坑细节详解
2020/12/06 Python
canvas绘图按照contain或者cover方式适配并居中显示
2019/02/18 HTML / CSS
西班牙最好的在线购买葡萄酒的商店:Vinoseleccion
2019/10/30 全球购物
python+selenium小米商城红米K40手机自动抢购的示例代码
2021/03/24 Python
教师党性分析材料
2014/02/04 职场文书
高考标语大全
2014/06/05 职场文书
保密工作整改情况汇报
2014/11/06 职场文书