分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 软件开发

vue.js 树菜单 递归组件树来实现

发布时间:2023-09-06 01:25责任编辑:董明明关键词:js递归组件

参照前辈方法实现的,觉得不错,记录一下:

父组件:

<!-- 菜单树 --> ???????????????<ul class="T_down" v-for="(menuItem,index) in customerArray" :key="index"> ???????????????????<tree-menu :treeData="menuItem"></tree-menu> ???????????????</ul>import treeMenu from ‘./treeMenu.vue‘myMailTree: [ ???????????????{ ???????????????????id: 0, ???????????????????label: ‘发件箱‘, ???????????????????children: [] ???????????????}, ???????????????{ ???????????????????id: 1, ???????????????????label: ‘收件箱‘, ???????????????????children: [ ???????????????????????{ ???????????????????????????id: 11, ???????????????????????????label: ‘常用邮件‘, ???????????????????????}, ???????????????????????{ ???????????????????????????id: 12, ???????????????????????????label: ‘常用邮件‘, ???????????????????????????children: [ ???????????????????????????????{ ???????????????????????????????????id: 11, ???????????????????????????????????label: ‘常用邮件‘, ???????????????????????????????????children: [ ???????????????????????????????????????{ ???????????????????????????????????????????id: 11, ???????????????????????????????????????????label: ‘常用邮件‘, ???????????????????????????????????????}, ???????????????????????????????????????{ ???????????????????????????????????????????id: 12, ???????????????????????????????????????????label: ‘常用邮件‘, ???????????????????????????????????????????children: [ ???????????????????????????????????????????????{ ???????????????????????????????????????????????????id: 11, ???????????????????????????????????????????????????label: ‘常用邮件‘, ???????????????????????????????????????????????}, ???????????????????????????????????????????????{ ???????????????????????????????????????????????????id: 12, ???????????????????????????????????????????????????label: ‘常用邮件‘, ???????????????????????????????????????????????????children: [ ???????????????????????????????????????????????????????{ ???????????????????????????????????????????????????????????id: 11, ???????????????????????????????????????????????????????????label: ‘常用邮件‘, ???????????????????????????????????????????????????????}, ???????????????????????????????????????????????????????{ ???????????????????????????????????????????????????????????id: 12, ???????????????????????????????????????????????????????????label: ‘常用邮件‘, ???????????????????????????????????????????????????????}, ???????????????????????????????????????????????????] ???????????????????????????????????????????????}, ???????????????????????????????????????????] ???????????????????????????????????????}, ???????????????????????????????????] ???????????????????????????????}, ???????????????????????????????{ ???????????????????????????????????id: 12, ???????????????????????????????????label: ‘常用邮件‘, ???????????????????????????????}, ???????????????????????????] ???????????????????????}, ???????????????????] ???????????????}, ???????????????{ ???????????????????id: 3, ???????????????????label: ‘草稿箱‘, ???????????????}, ???????????], components: { ???????‘tree-menu‘: treeMenu ???},

子组件:

<template> ???<li> ???????<h3> ???????????<i v-if="isFolder" @click="toggle" class="iconfont" :class="[open ? ‘icon-arrow-down‘: ‘icon-arrow-right‘]"></i> ???????????<span class="label">{{treeData.label}} ???????????????<em>(99)</em> ???????????</span> ???????????<span class="T_set"> ???????????????<i class="iconfont icon-subordinate"></i> ???????????????<i class="iconfont icon-subordinate"></i> ???????????????<i class="iconfont icon-subordinate"></i> ???????????</span> ???????</h3> ???????<ul class="T_down" v-show="open" v-if="isFolder"> ???????????<tree-menu v-for="item in treeData.children" :key="item.id" :treeData="item"></tree-menu> ???????</ul> ???</li></template><script>export default { ???name: ‘treeMenu‘, ???props: [‘treeData‘], ???data() { ???????return { ???????????open: false ???????} ???}, ???computed: { ???????isFolder() { ???????????return this.treeData.children && this.treeData.children.length ???????} ???}, ???methods: { ???????toggle: function() { ???????????if (this.isFolder) { ???????????????this.open = !this.open ???????????} ???????} ???}}</script>

less

ul.T_down { ???????????????????//菜单树 ???????????????????// border: 1px solid red; ???????????????????background-color: #fff; ???????????????????padding-left: 17px; ???????????????????line-height: 35px; ???????????????????li { ???????????????????????>h3 { ???????????????????????????// border: 1px solid red; ???????????????????????????font-weight: normal; ???????????????????????????font-size: 14px; ???????????????????????????padding-left: 23px; ???????????????????????????cursor: default; ???????????????????????????position: relative; ???????????????????????????>i.iconfont { ???????????????????????????????display: block; ???????????????????????????????width: 23px; ???????????????????????????????height: 100%; ???????????????????????????????text-align: center; ???????????????????????????????font-size: 12px; ???????????????????????????????position: absolute; ???????????????????????????????left: 0; ???????????????????????????????top: 0; ???????????????????????????????&:hover { ???????????????????????????????????color: #008cee; ???????????????????????????????????cursor: pointer; ???????????????????????????????} ???????????????????????????} ???????????????????????????>span.label { ???????????????????????????????color: #555; ???????????????????????????????>em { ???????????????????????????????????font-size: 12px; ???????????????????????????????????font-style: normal; ???????????????????????????????????color: #888; ???????????????????????????????} ???????????????????????????} ???????????????????????????&:hover { ???????????????????????????????background-color: #ddd; ???????????????????????????????span.T_set { ???????????????????????????????????display: block; ???????????????????????????????} ???????????????????????????} ???????????????????????????span.T_set { ???????????????????????????????float: right; ???????????????????????????????margin-right: 10px; ???????????????????????????????display: none; ???????????????????????????????i.iconfont { ???????????????????????????????????display: inline-block; ???????????????????????????????????padding: 0 2px; ???????????????????????????????????font-size: 13px; ???????????????????????????????????&:hover { ???????????????????????????????????????color: #008cee; ???????????????????????????????????????cursor: pointer; ???????????????????????????????????} ???????????????????????????????} ???????????????????????????} ???????????????????????} ???????????????????} ???????????????}

参考链接:

https://www.cnblogs.com/caihg/p/6208105.html

vue.js 树菜单 递归组件树来实现

原文地址:http://www.cnblogs.com/xiangsj/p/7843477.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved