Vue 实现树形视图数据功能

这篇文章主要介绍了关于实现vue 实现树形视图数据功能,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

利用简单的树形视图实现,熟悉了组件的递归使用

这是模拟的树形图数据

let all={   name:'all',   children:{    A:{     name:'A',     children:{      a1:{       name:'a1',       children:{        a11:{          name:'a11',         children:null        },        a12:{          name:'a12',         children:null        }       }      },      a2:{       name:'a2',       children:{        b21:{          name:'b21',         children:null        }       }      }     }    },    B:{     name:'B',     children:{      b1:{       name:'b1',       children:{        b11:{          name:'b11',         children:null        },        b12:{          name:'b12',         children:null        }       }      },      b2:{       name:'b2',       children:{        b21:{          name:'b21',         children:null        }       }      }     }    }   }  }

登录后复制

代码如下

立即学习“前端免费学习笔记(深入)”;

treelist.vue

 

  

       
  •     {{treelist.name}}        
  •   
    export default { name:'tree', props:['treelist'], data(){ return{ open:false } },computed:{ isFolder:function(){ return this.treelist.children } } ,methods:{ isshow(){ if (this.isFolder) { this.open =!this.open } } } }  

登录后复制

index.html

nbsp;html>          树形图    

        

  

登录后复制

index.js

import Vue from 'vue'; import tree from '../components/treelist.vue' let all={   name:'all',   children:{    A:{     name:'A',     children:{      a1:{       name:'a1',       children:{        a11:{          name:'a11',         children:null        },        a12:{          name:'a12',         children:null        }       }      },      a2:{       name:'a2',       children:{        b21:{          name:'b21',         children:null        }       }      }     }    },    B:{     name:'B',     children:{      b1:{       name:'b1',       children:{        b11:{          name:'b11',         children:null        },        b12:{          name:'b12',         children:null        }       }      },      b2:{       name:'b2',       children:{        b21:{          name:'b21',         children:null        }       }      }     }    }   }  } const app=new Vue({  el:"#app",  components:{   'tree':tree  },  data:{   treeList:all  } })

登录后复制

在经过踩坑之后,我发现Vue官网有类似的案例,链接→ 传送门

参考过官网的方法后,我尝试着实现了一下

这样写和我踩坑时的 思路不同点在于, 这样一个组件只负责一个 对象,遍历每个children 中的对象,逐个传入组件处理,而我第一次尝试则是 将整个children  传入自身   是一个组件处理多个对象,(第一次尝试的失败案例,有兴趣请看最下方)

这样一个组件处理一个对象 写的好处是什么呢

我可以在组件内自定义开关了

我在data里定义了变量open,因为组件递归,所以相当于每个组件都有个属于自己的open

Vue 实现树形视图数据功能

那为什么第一次踩坑时我不可以用这种方法呢,因为我第一次尝试 是一个组件处理多个对象 就是相当于 一个开关控制 children中的所有对象,当开关打开时会导致 这个同级的所有 对象都被展开

遍历children 挨个传入组件自身    用v-show 来控制是否显示 

Vue 实现树形视图数据功能

定义了一个计算属性,依据children来判断是否继续执行 

Vue 实现树形视图数据功能

在span标签上绑定了一个自定义事件

更改open 的值 

{{treelist.name}}

登录后复制

Vue 实现树形视图数据功能

实现效果

Vue 实现树形视图数据功能

以下 是我刚开始尝试的时候踩得坑

在这里记录一下,以后遇到类似问题留个印象

首先上来就遇到了这样的报错

Vue 实现树形视图数据功能

找了很久的问题,发现是因为组件内忘记写name了,自身使用自身必须填写name,并且与标签名一致

Vue 实现树形视图数据功能

一开始的实现方法,利用组件递归,显示出当前级的name渲染出来,并将其中的 children 中的所有对象 传给自己然后接着执行相同操作,直到children没有数据,值得一提的是

Vue 实现树形视图数据功能

,如果这里不加上 v-if 就会变成 死循环,就会一直执行下去,所以我们要判断一下当前执行的对象到底还有没有下一级

Vue 实现树形视图数据功能

这里我数据有稍微的改动,所以我第一次传入的数据就是(index.html页面)

Vue 实现树形视图数据功能

然后我定义了一个事件来处理 每一层的关闭和开启,我用弹框来查看Isopen 的值是否被改变

Vue 实现树形视图数据功能

我们看一下结果

刚进入页面时,括号中的undefined是 Isopen 当前的值,因为此时未被定义,所以为undefined

Vue 实现树形视图数据功能

然后我点击了A

Vue 实现树形视图数据功能

因为此时isopen已被反转值,所以此时isopen为true

Vue 实现树形视图数据功能

但是页面仍毫无变化,不说展开功能,就连undefined也没变化

Vue 实现树形视图数据功能

经过一番百度 ,发现原来是vue本身已经不允许这样直接更改 Props接受过来的值了

Vue2.0以后子组件不能更改父组件的值,只能通过子组件$emit(),父组件$on()进行响应更改

相关推荐:

Vue实现动态刷新Echarts组件

以上就是Vue 实现树形视图数据功能的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2764174.html

(0)
上一篇 2025年3月8日 10:24:27
下一篇 2025年3月8日 10:24:43

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 浅谈Vue 数据响应式原理

    这篇文章主要介绍了关于浅谈vue 数据响应式原理,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 前言 Vue的数据响应主要是依赖了Object.defineProperty(),那么整个过程是怎么样的呢?以我们自己的想法来走…

    2025年3月8日 编程技术
    200
  • 基于Vue实现拖拽功能

    这篇文章主要为大家详细介绍了vue实现拖拽功能,拖动方块进行移动,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 本文实例为大家分享了Vue实现拖拽功能的具体代码,供大家参考,具体内容如下 效果图: HTML代码:            …

    2025年3月8日
    200
  • vue做出全选与反选功能

    这次给大家带来vue做出全选与反选功能,vue做出全选与反选功能的注意事项有哪些,下面就是实战案例,一起来看一下。 全选功能可以说是前端开发中非常常见的一个功能,以前的项目开发用jQuery开发比较多。最近在使用vue前端框架重构之前的项目…

    2025年3月8日
    200
  • vue数据控制视图如何实现(附代码)

    这次给大家带来vue数据控制视图如何实现(附代码),vue数据控制视图实现的注意事项有哪些,下面就是实战案例,一起来看一下。 前记 三个月前看了vue源码来分析如何做到响应式数据的, 文章名字叫vue源码之响应式数据, 最后分析到, 数据变…

    编程技术 2025年3月8日
    200
  • vue处理storejs获取的数据

    这次给大家带来vue处理storejs获取的数据,vue处理storejs获取数据的注意事项有哪些,下面就是实战案例,一起来看一下。 具体代码如下所示: export default { data(){ return { shopList:…

    编程技术 2025年3月8日
    200
  • PHP图片简单上传功能详解

    这篇文章主要为大家详细介绍了php图片简单上传功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。 以下是代码:    登录后复制 总结: php 上传图片,一般都使用move_uploaded_file方法保存在服务器上。但如果一个网…

    编程技术 2025年3月8日
    200
  • Vue动态创建与删除数据步骤详解

    这次给大家带来Vue动态创建与删除数据步骤详解,Vue动态创建与删除数据的注意事项有哪些,下面就是实战案例,一起来看一下。 视图: 代码如下: //导入vue.js //非常简单了设置了一下css样式 #app{ height: 100%;…

    2025年3月8日
    200
  • vue实现全选反选功能案例详解

    这次给大家带来vue实现全选反选功能案例详解,vue实现全选反选功能的注意事项有哪些,下面就是实战案例,一起来看一下。 全选功能可以说是前端开发中非常常见的一个功能,以前的项目开发用jQuery开发比较多。最近在使用vue前端框架重构之前的…

    2025年3月8日
    200
  • Vue实现树形视图数据步骤详解

    这次给大家带来Vue实现树形视图数据步骤详解,Vue实现树形视图数据的注意事项有哪些,下面就是实战案例,一起来看一下。 这是模拟的树形图数据 let all={ name:’all’, children:{ A:{ name:’A’, ch…

    2025年3月8日 编程技术
    200
  • node实现爬虫功能案例分析

    这次给大家带来node实现爬虫功能案例分析,node实现爬虫功能的注意事项有哪些,下面就是实战案例,一起来看一下。 node是服务器端的语言,所以可以像python一样对网站进行爬取,下面就使用node对博客园进行爬取,得到其中所有的章节信…

    2025年3月8日
    200

发表回复

登录后才能评论