Vue.js 递归组件实现树形菜单(实例分享)


Posted in Javascript onDecember 21, 2016

最近看了 Vue.js 的递归组件,实现了一个最基本的树形菜单。

项目结构:

Vue.js 递归组件实现树形菜单(实例分享)

main.js 作为入口,很简单:

import Vue from 'vue'
Vue.config.debug = true
import main from './components/main.vue'
new Vue({
 el: '#app',
 render: h => h(main)
})

它引入了一个组件 main.vue:

<template>
 <div class="tree-menu">
 <ul v-for="menuItem in theModel">
 <my-tree :model="menuItem"></my-tree>
 </ul>
 </div>
</template>
<script>
var myData = [
 {
 'id': '1',
 'menuName': '基础管理',
 'menuCode': '10',
 'children': [
 {
 'menuName': '用户管理',
 'menuCode': '11'
 },
 {
 'menuName': '角色管理',
 'menuCode': '12',
 'children': [
 {
 'menuName': '管理员',
 'menuCode': '121'
 },
 {
 'menuName': 'CEO',
 'menuCode': '122'
 },
 {
 'menuName': 'CFO',
 'menuCode': '123'
 },
 {
 'menuName': 'COO',
 'menuCode': '124'
 },
 {
 'menuName': '普通人',
 'menuCode': '124'
 }
 ]
 },
 {
 'menuName': '权限管理',
 'menuCode': '13'
 }
 ]
 },
 {
 'id': '2',
 'menuName': '商品管理',
 'menuCode': ''
 },
 {
 'id': '3',
 'menuName': '订单管理',
 'menuCode': '30',
 'children': [
 {
 'menuName': '订单列表',
 'menuCode': '31'
 },
 {
 'menuName': '退货列表',
 'menuCode': '32',
 'children': []
 }
 ]
 },
 {
 'id': '4',
 'menuName': '商家管理',
 'menuCode': '',
 'children': []
 }
];
import myTree from './common/treeMenu.vue'
export default {
 components: {
 myTree
 },
 data() {
 return {
 theModel: myData
 }
 }
}
</script>

该文件引入了树形组件 treeMenu.vue:

<template>
 <li>
 <span @click="toggle">
 <i v-if="isFolder" class="icon" :class="[open ? 'folder-open': 'folder']"></i>
 <i v-if="!isFolder" class="icon file-text"></i>
 {{ model.menuName }}
 </span>
 <ul v-show="open" v-if="isFolder">
 <tree-menu v-for="item in model.children" :model="item"></tree-menu>
 </ul>
 </li>
</template>
 <script>
export default {
 name: 'treeMenu',
 props: ['model'],
 data() {
 return {
 open: false,
 isFolder: true
 }
 },
 computed: {
 isFolder: function() {
 return this.model.children && this.model.children.length
 }
 },
 methods: {
 toggle: function() {
 if (this.isFolder) {
 this.open = !this.open
 }
 }
 }
}
</script>
 <style>
ul {
 list-style: none;
}
i.icon {
 display: inline-block;
 width: 15px;
 height: 15px;
 background-repeat: no-repeat;
 vertical-align: middle;
}
.icon.folder {
 background-image: url(/src/assets/folder.png);
}
.icon.folder-open {
 background-image: url(/src/assets/folder-open.png);
}
.icon.file-text {
 background-image: url(/src/assets/file-text.png);
}
.tree-menu li {
 line-height: 1.5;
}
</style>

就这么简单。这篇文章还真没什么可写的,权当记录吧。

截图效果如下:

Vue.js 递归组件实现树形菜单(实例分享)

项目代码下载地址:http://xiazai.3water.com/201612/yuanma/caihg-master_3water.rar

 以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
让Firefox支持event对象实现代码
Nov 07 Javascript
Javascript延迟执行实现方法(setTimeout)
Dec 30 Javascript
实现点击列表弹出列表索引的两种方式
Mar 08 Javascript
JS 去前后空格大全(IE9亲测)
Jul 15 Javascript
javascript数组去重方法终极总结
Jun 05 Javascript
js数组操作方法总结(必看篇)
Nov 22 Javascript
AngularJS实现页面跳转后自动弹出对话框实例代码
Aug 02 Javascript
Angularjs之如何在跨域请求中传输Cookie的方法
Jun 01 Javascript
Vue.js项目中管理每个页面的头部标签的两种方法
Jun 25 Javascript
实例详解BootStrap的动态模态框及静态模态框
Aug 13 Javascript
vue的for循环使用方法
Feb 12 Javascript
Vue实现附件上传功能
May 28 Javascript
详解jQuery选择器
Dec 21 #Javascript
如何清除IE10+ input X 文本框的叉叉和密码输入框的眼睛图标
Dec 21 #Javascript
js实现可输入可选择的select下拉框
Dec 21 #Javascript
详解handlebars+require基本使用方法
Dec 21 #Javascript
JS实现的驼峰式和连字符式转换功能分析
Dec 21 #Javascript
JS实现的RGB网页颜色在线取色器完整实例
Dec 21 #Javascript
js querySelector() 使用方法
Dec 21 #Javascript
You might like
世界第一个无线广播电台 KDKA
2021/03/01 无线电
PHP的压缩函数实现:gzencode、gzdeflate和gzcompress的区别
2016/01/27 PHP
Js base64 加密解密介绍
2013/10/11 Javascript
当json键为数字时的取值方法解析
2013/11/15 Javascript
javascript使用正则控制input输入框允许输入的值方法大全
2014/06/19 Javascript
再谈JavaScript线程
2015/07/10 Javascript
javascript中setAttribute()函数使用方法及兼容性
2015/07/19 Javascript
基于JavaScript操作DOM常用的API小结
2015/12/01 Javascript
js设置和获取自定义属性的方法
2016/10/20 Javascript
JS触摸屏网页版仿app弹窗型滚动列表选择器/日期选择器
2016/10/30 Javascript
详解nodejs 文本操作模块-fs模块(五)
2016/12/23 NodeJs
html5 canvas 详细使用教程
2017/01/20 Javascript
微信小程序图片左右摆动效果详解
2019/07/13 Javascript
js实现简单页面全屏
2019/09/17 Javascript
Vue使用Proxy代理后仍无法生效的解决
2020/11/13 Javascript
js实现简单商品筛选功能
2021/02/02 Javascript
Python实现将n个点均匀地分布在球面上的方法
2015/03/12 Python
Pycharm远程调试openstack的方法
2017/11/21 Python
python利用微信公众号实现报警功能
2018/06/10 Python
Python 从列表中取值和取索引的方法
2018/12/25 Python
Python使用LDAP做用户认证的方法
2019/06/20 Python
详解pandas中MultiIndex和对象实际索引不一致问题
2019/07/23 Python
Django ImageFiled上传照片并显示的方法
2019/07/28 Python
Django自定义列表 models字段显示方式
2020/04/03 Python
如何利用python之wxpy模块玩转微信
2020/08/17 Python
Python如何telnet到网络设备
2021/02/18 Python
Html5获取高德地图定位天气的方法
2019/12/26 HTML / CSS
阿根廷在线宠物商店:Puppis
2018/03/23 全球购物
俄罗斯最大的在线手表商店:Bestwatch.ru
2020/01/11 全球购物
英文简历中的自荐信范文
2013/12/14 职场文书
春节活动策划方案
2014/01/24 职场文书
大学生毕业自我鉴定范文
2014/02/03 职场文书
美术毕业生求职信
2014/02/25 职场文书
纪律教育学习心得体会
2014/09/02 职场文书
六一文艺汇演开幕词
2015/01/29 职场文书
Redis全局ID生成器的实现
2022/06/05 Redis