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 相关文章推荐
父子窗体间传递JSON格式的数据的代码
Dec 25 Javascript
打豆豆小游戏 用javascript编写的[打豆豆]小游戏
Jan 08 Javascript
jQuery Ajax异步处理Json数据详解
Nov 05 Javascript
详解JavaScript语法对{}处理的坑爹之处
Jun 05 Javascript
z-blog SyntaxHighlighter 长代码无法换行解决办法(基于jquery)
Nov 18 Javascript
详解JavaScript基于面向对象之创建对象(2)
Dec 10 Javascript
Knockout自定义绑定创建方法
Dec 26 Javascript
JS实现物体带缓冲的间歇运动效果示例
Dec 22 Javascript
js中toString()和String()区别详解
Mar 23 Javascript
thinkjs微信中控之微信鉴权登陆的实现代码
Aug 08 Javascript
微信小程序通过一个json实现分享朋友圈图片
Sep 03 Javascript
VUE实现强制渲染,强制更新
Oct 29 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
火车采集器 免费版使出收费版本功能实现原理
2009/09/17 PHP
在MongoDB中模拟Auto Increment的php代码
2011/03/06 PHP
PHP中模拟处理HTTP PUT请求的例子
2014/07/22 PHP
使用php+swoole对client数据实时更新(一)
2016/01/07 PHP
PHP中调用C/C++制作的动态链接库的教程
2016/03/10 PHP
Laravel 5.3 学习笔记之 错误&amp;日志
2016/08/28 PHP
PHP标准类(stdclass)用法示例
2016/09/28 PHP
PHP执行shell脚本运行程序不产生core文件的方法
2016/12/28 PHP
ExtJS 2.0实用简明教程 之Border区域布局
2009/04/29 Javascript
Ext 今日学习总结
2010/09/19 Javascript
javascript中setTimeout的问题解决方法
2014/05/08 Javascript
DOM基础教程之使用DOM + Css
2015/01/20 Javascript
动态加载jQuery的两种方法实例分析
2015/07/17 Javascript
很棒的js Tab选项卡切换效果
2016/08/30 Javascript
canvas绘制表盘时钟
2017/01/23 Javascript
nodejs读写json文件的简单方法(必看)
2017/03/09 NodeJs
zTree树形菜单交互选项卡效果的实现方法
2017/12/25 Javascript
微信小程序如何像vue一样在动态绑定类名
2018/04/17 Javascript
[45:18]完美世界DOTA2联赛循环赛 PXG vs IO 第二场 11.06
2020/11/09 DOTA
浅谈Python 的枚举 Enum
2017/06/12 Python
Tensorflow环境搭建的方法步骤
2018/02/07 Python
python psutil库安装教程
2018/03/19 Python
python如何读取bin文件并下发串口
2019/07/05 Python
python构造函数init实例方法解析
2020/01/19 Python
Python的赋值、深拷贝与浅拷贝的区别详解
2020/02/12 Python
Python Socketserver实现FTP文件上传下载代码实例
2020/03/27 Python
Django框架配置mysql数据库实现过程
2020/04/22 Python
Python 程序员必须掌握的日志记录
2020/08/17 Python
使用css3做0.5px的细线的示例代码
2018/01/18 HTML / CSS
HTML5新增属性data-*和js/jquery之间的交互及注意事项
2017/08/08 HTML / CSS
Html5 new XMLHttpRequest()监听附件上传进度
2021/01/14 HTML / CSS
与UNIX有关的几个名词
2015/09/17 面试题
机械工程学院大学生求职信
2014/05/25 职场文书
暑期政治学习心得体会
2014/09/02 职场文书
保险公司反洗钱宣传活动总结
2015/05/08 职场文书
Golang 遍历二叉树
2022/04/19 Golang