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 相关文章推荐
如何获取select下拉框的值(option没有及有value属性)
Nov 08 Javascript
javascript定义变量时加var与不加var的区别
Dec 22 Javascript
jquery搜索框效果实现方法
Jan 16 Javascript
jQuery实现DIV层淡入淡出拖动特效的方法
Feb 13 Javascript
详解js中的apply与call的用法
Jul 30 Javascript
微信小程序 开发之顶部导航栏实例代码
Feb 23 Javascript
vue cli使用绝对路径引用图片问题的解决
Dec 06 Javascript
AngularJS集合数据遍历显示的实例
Dec 27 Javascript
vue better-scroll插件使用详解
Jan 25 Javascript
vue-router重定向和路由别名的使用讲解
Jan 19 Javascript
ionic+html5+API实现双击返回键退出应用
Sep 17 Javascript
html5中sharedWorker实现多页面通信的示例代码
May 07 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
社区(php&amp;&amp;mysql)三
2006/10/09 PHP
php学习之变量的使用
2011/05/29 PHP
PHP模拟登陆163邮箱发邮件及获取通讯录列表的方法
2015/03/07 PHP
PHP文件生成的图片无法使用CDN缓存的解决方法
2015/06/20 PHP
php版微信公众账号第三方管理工具开发简明教程
2016/09/23 PHP
PHP GD库相关图像生成和处理函数小结
2016/09/30 PHP
Yii2实现UploadedFile上传文件示例
2017/02/15 PHP
Mac系统下安装PHP Xdebug
2018/03/30 PHP
php新建文件的方法实例
2019/09/26 PHP
不错的一个日期输入 动态
2006/11/06 Javascript
用jquery和json从后台获得数据集的代码
2011/11/07 Javascript
一个JavaScript的求爱小特效
2014/05/09 Javascript
JQuery用户名校验的具体实现
2016/03/18 Javascript
js判断复选框是否选中及选中个数的实现代码
2016/05/30 Javascript
微信小程序 slider 详解及实例代码
2017/01/10 Javascript
Node.JS利用PhantomJs抓取网页入门教程
2017/05/19 Javascript
React-Native 组件之 Modal的使用详解
2017/08/08 Javascript
vue学习笔记之v-if和v-show的区别
2017/09/20 Javascript
微信小程序返回多级页面的实现方法
2017/10/27 Javascript
浅析JS抽象工厂模式
2017/12/14 Javascript
[01:34]2014DOTA2 TI预选赛预选赛 选手比赛房大揭秘!
2014/05/20 DOTA
Python中设置变量访问权限的方法
2015/04/27 Python
django限制匿名用户访问及重定向的方法实例
2018/02/07 Python
在Pycharm中将pyinstaller加入External Tools的方法
2019/01/16 Python
PyPDF2读取PDF文件内容保存到本地TXT实例
2020/05/12 Python
整理HTML5移动端开发的常用触摸事件
2016/04/15 HTML / CSS
英国知名奢侈品包包品牌:Milli Millu
2016/12/22 全球购物
琳达·法罗眼镜英国官网:Linda Farrow英国
2021/01/19 全球购物
实习教师自我鉴定
2013/12/12 职场文书
数学检讨书1000字
2014/02/24 职场文书
人力资源主管的岗位职责
2014/03/15 职场文书
考核工作实施方案
2014/03/30 职场文书
2014年党员个人剖析材料
2014/10/08 职场文书
JS如何实现基于websocket的多端桥接平台
2021/05/14 Javascript
解决mysql:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO/YES)
2021/06/26 MySQL
MyBatis配置文件解析与MyBatis实例演示
2022/04/07 Java/Android