vue树形表格内容太长(VUE 无限层级树形数据结构显示的实现)
类别:编程学习 浏览量:2052
时间:2021-10-19 06:06:44 vue树形表格内容太长
VUE 无限层级树形数据结构显示的实现目录
- 组件递归调用
- 使用render方法
在做项目中,会遇到一些树形的数据结构,常用在左侧菜单导航,或者评论引用等地方,这种数据结构有个特点是不知道它会嵌套多少层,所以用template去展示这样的数据时就有点棘手,这篇文章梳理两种展示这种数据结构的方法。
文章中用到的数据是下面这个:
mainData: { value: "root", children:[{ value: "层级1-1", children:[{ value: "层级2-1", children:[{ value: "层级3-1", children:[] }] },{ value: "层级2-2", children:[] }] },{ value: "层级1-2", children:[] }] }
也就是下面这个样子。
第一种是组件递归调用自己的方式,创建一个组件,该组件在引用自己去展示children的数据,子组件如下:
<template> <li> <li class="demo"> {{treeData.value}} <tree-comp v-for="(item, index) in treeData.children" :treeData="item"></tree-comp> </li> </li> </template> <script> export default { name: 'treeComp', props:{ treeData: { default: function(){ return {} } } }, mounted(){}, methods:{} } </script> <style lang="less" scoped> .demo{padding:5px 0;margin:1px 10px;text-align: left;font-size:16px;max-width:500px;border-left:1px dashed #999; &:before{content:'--';display: inline-block;padding:0 4px;} } </style>
然后创建父组件,父组件使用子组件,并将数据传入子组件。
<template> <tree-comp :treeData="mainData"></tree-comp> </template> <script> export default { name: 'treeMain', data () { return { mainData: { value: "root", children:[ { value: "层级1-1", children:[{ value: "层级2-1", children:[{ value: "层级3-1", children:[] }] },{ value: "层级2-2", children:[] }] },{ value: "层级1-2", children:[] } ] } } }, components:{ "tree-comp": () => import('./TreeComp') }, mounted(){}, methods:{} } </script>
关于递归组件的内容,在官方文档里是有提到的-->递归组件
使用render方法除了使用组件的方式,也可以使用vue的render方法,去利用JavaScript 的完全编程的能力,实现递归处理树形数据,从而展示出无限层级树。如下:
<template> <tree-comp :treeData="mainData"></tree-comp> </template> <script> export default { name: 'treeRender', data () { return { mainData: { value: "root", children:[ { value: "层级1-1", children:[{ value: "层级2-1", children:[{ value: "层级3-1", children:[] }] },{ value: "层级2-2", children:[] }] },{ value: "层级1-2", children:[] } ] } } }, components:{ treeComp:{ functional: true, props: {treeData: Object}, render(h, {props: {treeData = {}}}) { const creatNode = (node)=>{ if(node.children && node.children.length > 0){ let hArr = node.children.map(item=>{ return creatNode(item) }) return h('li', {class:'demo'}, [node.value, hArr]) }else{ return h('li', {class:'demo'}, [node.value]) } } return creatNode(treeData) }, } }, mounted(){}, methods:{} } </script> <style lang="less" scoped> .demo{padding:5px 0;margin:1px 10px;text-align: left;font-size:16px;max-width:500px;border-left:1px dashed #999; &:before{content:'--';display: inline-block;padding:0 4px;} } </style>
其中最核心的就是在render方法里,creatNode方法用递归的方式,深度优先遍历树状数据,生成vnode,然后渲染出了页面。
到此这篇关于VUE 无限层级树形数据结构显示的实现的文章就介绍到这了,更多相关VUE 无限层级树形结构内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
您可能感兴趣
- vue浏览pdf文件(如何在vue中使用pdfjs预览pdf文件)
- vueelementui表格操作(Vue组件库ElementUI实现表格列表分页效果)
- vue怎么注册公共组件(解读Vue组件注册方式)
- vue使用elementui框架(总结Vue Element UI使用中遇到的问题)
- vue项目做过哪些打包优化(Vue项目优化的一些实战策略)
- elementui和vue详解(Vue+Element UI实现概要小弹窗的全过程)
- vue怎么实现预览与放大(Vue实现牌面翻转效果)
- vue可以使用jsx语法吗(vue中正确使用jsx语法的姿势分享)
- vue中怎么触发复选框的点击事件(vue点击弹窗自动触发点击事件的解决办法模拟场景)
- vue定时器中间变颜色(Vue如何优雅的清除定时器)
- vue 如何执行动态js(如何利用vue.js实现拖放功能)
- vueelementui三级菜单(vue+element ui实现锚点定位)
- vue中的watch属性(vue Watch和Computed的使用总结)
- springboot+vue项目演示(springboot+VUE实现登录注册)
- vue找不到水印设置(Vue使用自定义指令实现页面底部加水印)
- vue3 props用法(vue3组合API中setup、 ref、reactive的使用大全)
- 赵薇时胖时瘦 最近变美少女 原因在这里 躺着就变瘦(赵薇时胖时瘦最近变美)
- 学会这26种姿势,你就可以和兵哥哥切磋了(你就可以和兵哥哥切磋了)
- 吴彦祖陈冠希 恩怨 ,失去曾让他流泪的女友,终遇走过18年真爱(吴彦祖陈冠希恩怨)
- 痴情男神 吴彦祖 与妻子恋爱8年,结婚10年,家庭幸福美满(痴情男神吴彦祖)
- 成功破圈,小牛电动SQi强势开 跨(小牛电动SQi强势开)
- 挑战新国标电自天花板,九号机械师MMAX 110P深度体验(挑战新国标电自天花板)
热门推荐
- css中有几种样式表(深入浅出学习层叠样式表--css推荐)
- mysql8.0安装教程win10(Windows10下mysql 8.0.22 安装配置方法图文教程)
- php面向对象编程代码(php面向对象程序设计入门教程)
- css3边框讲解(六种css3实现的边框过渡效果)
- python3.7.2 详细安装教程(python3.5安装python3-tk详解)
- Html5中的<section>标签
- 谷歌浏览器调试工具中sources面板
- 护卫神主机大师使用教程(护卫神主机大师软件窗口显示不全的解决办法)
- php7.4 废弃功能(浅析PHP7 的垃圾回收机制)
- mysqldump 命令详解(mysqldump你可能不知道的参数)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9