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 相关文章推荐
在标题栏显示新消息提示,很多公司项目中用到这个方法
Nov 04 Javascript
jQuery渐变发光导航菜单的实例代码
Mar 27 Javascript
jquery实现漂浮在网页右侧的qq在线客服插件示例
May 13 Javascript
Javascript call和apply区别及使用方法
Nov 14 Javascript
javascript获取ckeditor编辑器的值(实现代码)
Nov 18 Javascript
jtable列中自定义button示例代码
Nov 21 Javascript
JavaScript中的变量定义与储存介绍
Dec 31 Javascript
Bootstrap每天必学之附加导航(Affix)插件
Apr 25 Javascript
jQuery调用Webservice传递json数组的方法
Aug 06 Javascript
详解jQuery的表单验证插件--Validation
Dec 21 Javascript
解析ajaxFileUpload 异步上传文件简单使用
Dec 30 Javascript
Node.js assert断言原理与用法分析
Jan 04 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
不支持fsockopen但支持culr环境下下ucenter与modoer通讯问题
2011/08/12 PHP
destoon会员注册提示“数据校验失败(2)”解决方法
2014/06/21 PHP
百度工程师讲PHP函数的实现原理及性能分析(二)
2015/05/13 PHP
yii2.0实现验证用户名与邮箱功能
2015/12/22 PHP
JavaScript中获取未知对象属性的代码
2011/04/27 Javascript
javascript查询字符串参数的方法
2015/01/28 Javascript
JS判断是否360安全浏览器极速内核的方法
2015/01/29 Javascript
jQuery使用fadein方法实现渐出效果实例
2015/03/27 Javascript
js实现带圆角的多级下拉菜单效果
2015/08/28 Javascript
简单理解JavaScript中的封装与继承特性
2016/03/19 Javascript
NodeJS创建基础应用并应用模板引擎
2016/04/12 NodeJs
深入理解ECMAScript的几个关键语句
2016/06/01 Javascript
使用vue.js2.0 + ElementUI开发后台管理系统详细教程(二)
2017/01/21 Javascript
JS高仿抛物线加入购物车特效实现代码
2017/02/20 Javascript
JS实现简易刻度时钟示例代码
2017/03/11 Javascript
详解使用fetch发送post请求时的参数处理
2017/04/05 Javascript
easyui下拉框动态级联加载的示例代码
2017/11/29 Javascript
Vue引入jquery实现平滑滚动到指定位置
2018/05/09 jQuery
Angular刷新当前页面的实现方法
2018/11/21 Javascript
js面试题之异步问题的深入理解
2020/09/20 Javascript
关于element的表单组件整理笔记
2021/02/05 Javascript
[47:42]完美世界DOTA2联赛PWL S2 GXR vs Ink 第一场 11.19
2020/11/20 DOTA
[03:07]完美世界DOTA2联赛PWL DAY10 决赛集锦
2020/11/11 DOTA
python tkinter界面居中显示的方法
2018/10/11 Python
python、Matlab求定积分的实现
2019/11/20 Python
通过实例学习Python Excel操作
2020/01/06 Python
利用CSS3实现动态的二级三级菜单效果实例源码
2017/01/04 HTML / CSS
Sunglasses Shop瑞典:欧洲领先的太阳镜网上商店
2018/04/22 全球购物
30年同学聚会感言
2014/01/30 职场文书
2014年党建工作总结
2014/11/11 职场文书
高中生自我评价范文2015
2015/03/03 职场文书
2016年敬老月活动总结
2016/04/05 职场文书
基于python实现银行管理系统
2021/04/20 Python
Python实现灰色关联分析与结果可视化的详细代码
2022/03/25 Python
Python FuzzyWuzzy实现模糊匹配
2022/04/28 Python
解决Oracle数据库用户密码过期
2022/05/11 Oracle