怎么用Vue实现树形视图数据

这次给大家带来怎么用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

          树形图    

登录后复制

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()进行响应更改

相信看了本文案例你已经掌握了方法,更多精彩请关注【创想鸟】其它相关文章!

推荐阅读:

如何用Angular实现数据请求功能

怎样用Vue+better-scroll实现字母索引导航

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

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

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

(0)
上一篇 2025年3月8日 08:20:30
下一篇 2025年3月8日 08:20:50

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

相关推荐

  • 怎么实现Vue数据响应式

    这次给大家带来怎么实现Vue数据响应式,实现Vue数据响应式的注意事项有哪些,下面就是实战案例,一起来看一下。 前言 Vue的数据响应主要是依赖了Object.defineProperty(),那么整个过程是怎么样的呢?以我们自己的想法来走…

    2025年3月8日 编程技术
    200
  • 如何实现Vue父子组件数据传递

    这次给大家带来如何实现Vue父子组件数据传递,实现Vue父子组件数据传递的注意事项有哪些,下面就是实战案例,一起来看一下。 当我们在书写 vue 组件的时候,也许可能会用到数据传递;将父组件的数据传递给子组件,有时候也需要通过子组件去事件去…

    2025年3月8日 编程技术
    200
  • Ajax点击不断加载数据列表(图文教程)

    这篇文章主要介绍了ajax点击不断加载数据列表的相关资料,需要的朋友可以参考下 Ajax简介 AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页…

    2025年3月8日
    200
  • 无限分级和tree结构数据增删改

    这篇文章主要介绍了无限分级和tree结构数据增删改的相关资料,需要的朋友可以参考下 阅读目录 •无限分级•jstree插件•Demo•创建Region实体•满足jstree插件的数据对象Dto•数据转换•初始化获取转换后的数据•前台数据加载…

    2025年3月8日
    200
  • ajax请求之返回数据的顺序问题分析

    这篇文章主要介绍了ajax请求之返回数据的顺序问题,结合实例形式分析了ajax请求返回值的排序问题,需要的朋友可以参考下 本文实例分析了ajax请求之返回数据的顺序问题。分享给大家供大家参考,具体如下: ajax请求一个url,php后端处…

    编程技术 2025年3月8日
    200
  • Ajax异步提交数据返回值的换行问题实例分析

    这篇文章主要介绍了ajax异步提交数据返回值的换行问题,结合实例形式较为详细的分析了ajax异步提交过程中返回值带有换行的处理技巧,具有一定参考借鉴价值,需要的朋友可以参考下 本文实例分析了Ajax异步提交数据返回值的换行问题。分享给大家供…

    编程技术 2025年3月8日
    200
  • 如何使用Vue数据监听方法watch

    这次给大家带来如何使用Vue数据监听方法watch,使用Vue数据监听方法watch的注意事项有哪些,下面就是实战案例,一起来看一下。 当Vue视图中的数据变化时, 关联的函数会被执行 监听方法watch的使用 var vm = new V…

    2025年3月8日
    200
  • 如何使用vue数据控制视图

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

    编程技术 2025年3月8日
    200
  • vue利用axios来完成数据的交互

    这篇文章主要介绍了vue利用axios来完成数据的交互,本文通过实例代码给大家讲解数据交互方法及安装方法,需要的朋友可以参考下 axios基于 Promise 的 HTTP 请求客户端,可同时在浏览器和 node.js 中使用 现在Vue官…

    2025年3月8日
    200
  • 使用JSON格式提交数据到服务端的实例代码

    这篇文章主要介绍了使用json格式提交数据到服务端的实例代码,代码简单易懂,非常不错,具有参考借鉴价值,需要的朋友参考下 准备Hero.java public class Hero {  private String name;  priv…

    编程技术 2025年3月8日
    200

发表回复

登录后才能评论