博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
vuejs使用递归组件实现树形目录
阅读量:6174 次
发布时间:2019-06-21

本文共 2007 字,大约阅读时间需要 6 分钟。

上篇文章我提到了通讯录的开发,里面的目录使用了vue的递归组件实现的树形目录,这篇文章就来讲讲如何实现树形目录吧!

首先实现效果如下,觉得菜单还是比较nice的是吧:

clipboard.png

这边数据调用的是数据库的数据的,需要数据库进行数据的构造,这里涉及到java的构造多叉树的知识,后续我会另外写一篇文章详细讲解,这里讲下前端。

数据可以先构造json使用,这里用到的格式大概如下,以childList来嵌套子菜单:

{    id:YH,     name:银行,     pid:0,     childList:[{        id:YH******,         name:国家开发银行,         pid:YH,         childList:[{            id:YH*****3,             name:国家开发银行香港分行,             pid:YH******,             childList:[]        },         {            id=YH*****1,             name=国家开发银行广东省分行,             pid=YH******,             childList=[]        }, {            id=YH*****2,             name=国家开发银行深圳分行,             pid=YH******,             childList=[]        }    ]}}

按照思路,我们是要ul里面套li,li里面套ul,这样无限套用,所以在子组件里面这么写:

  • {
    {model.name}}
  • 在官方文档里面强调了name属性,所以我们在开始还要定义name,这边的name用到的是上面的tree-menu:

    export default {    name: 'treeMenu',    props: ['model'],    components: {}}

    按照vue的思想,不操作Dom树,我们定义两个变量,一个显示隐藏子菜单(open),一个存不存子菜单修改图标(isFolder)。

    data() {      return {        open: false,        isFolder: true,      } },

    我是参照一篇文章编写的,在这一步说的是“利用vue计算属性动态改变isFolder的值,修改图标,判断存在不子级和子级长度”

    computed: {    isFolder() {        return this.model.childTreeNode && this.model.childTreeNode.length    }}

    这里就出现了个问题,会一直不停地报错:

    clipboard.png

    找了很久的问题,结果我是这样解决的,去掉computed的计算属性,将其放到created里面:

    created(){      //将isFolder放在这里判断可以识别出最底层菜单,然后改变图标,放在computed的话会一直报错并识别不出最底层菜单改变样式      this.isFolder = this.model.childList && this.model.childList.length;    }

    显示/隐藏事件

    methods: {      toggle: function() {        if(this.isFolder){          this.open = !this.open;        }      },}

    到这里就构造好树形目录的组件了,只要在相应的父组件里面调用就行了,完整代码如下:

    父组件中引用

    子组件:

    子组件可以直接使用,样式也一起贴出来了,但是在父组件中也有点样式,就留给你们自己操作了,这个完整的代码里面还包括了上篇文章提到的组件传值的部分。

    我的icon用的是阿里的iconfont,大家也可以百度搜一下

    转载地址:http://poqba.baihongyu.com/

    你可能感兴趣的文章
    实现iOS7上tableView的切割线像iOS6中的效果
    查看>>
    使用阿里云接口进行银行卡四要素实名认证
    查看>>
    聊聊excel生成图片的几种方式
    查看>>
    20 万网络节点背后的数据创新应用
    查看>>
    理论 | 朴素贝叶斯模型算法研究与实例分析
    查看>>
    docker安装gitlab只需要3分钟
    查看>>
    Android菜鸟学习js笔记 一
    查看>>
    Java基础之SPI机制
    查看>>
    使用js控制滚动条的位置
    查看>>
    【Tornado源码阅读笔记】tornado.web.Application
    查看>>
    lsyncd搭建测试
    查看>>
    移动web开发之像素和DPR
    查看>>
    nginx+tomcat+redis实现session共享
    查看>>
    UWP VirtualizedVariableSizedGridView 支持可虚拟化可变大小Item的View(二)
    查看>>
    rsync 介绍
    查看>>
    做一个合格的Team Leader -- 基本概念
    查看>>
    leetcode 190 Reverse Bits
    查看>>
    阿里巴巴发布AliOS品牌 重投汽车及IoT领域
    查看>>
    OPENCV图像处理(二):模糊
    查看>>
    glassfish4系统启动脚本
    查看>>