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 相关文章推荐
javascript eval和JSON之间的联系
Dec 31 Javascript
鼠标滑在标题上显示图片的JS代码
Nov 19 Javascript
javascript显式类型转换实例分析
Apr 25 Javascript
开启Javascript中apply、call、bind的用法之旅模式
Oct 28 Javascript
JavaScript遍历Json串浏览器输出的结果不统一问题
Nov 03 Javascript
jQuery实现对网页节点的增删改查功能示例
Sep 18 jQuery
node文字生成图片的示例代码
Oct 26 Javascript
基于Angularjs-router动态改变Title值的问题
Aug 30 Javascript
微信小程序全局变量GLOBALDATA的定义和调用过程解析
Sep 23 Javascript
js实现简易计算器功能
Oct 18 Javascript
通过vue刷新左侧菜单栏操作
Aug 06 Javascript
Nuxt pages下不同的页面对应layout下的页面布局操作
Nov 05 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通过正则表达式下载图片到本地的实现代码
2011/09/19 PHP
很让人受教的 提高php代码质量36计
2012/09/05 PHP
PHP实现根据数组的值进行分组的方法
2017/04/20 PHP
php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析
2020/02/28 PHP
最近项目写了一些js,水平有待提高
2009/01/31 Javascript
Javascript Global对象
2009/08/13 Javascript
JQuery 操作select标签实现代码
2010/05/14 Javascript
jQuery选择头像并实时显示的代码
2010/06/27 Javascript
jQuery Tools Dateinput使用介绍
2012/07/14 Javascript
jquery mobile的触控点击事件会多次触发问题的解决方法
2014/05/08 Javascript
判断日期是否能跨月查询的js代码
2014/07/25 Javascript
JavaScript参数个数可变的函数举例说明
2014/10/10 Javascript
jQuery实现锚点scoll效果实例分析
2015/03/10 Javascript
Angular 4依赖注入学习教程之组件服务注入(二)
2017/06/04 Javascript
javascript计算对象长度的方法
2017/10/25 Javascript
JavaScript中click和onclick本质区别与用法分析
2018/06/07 Javascript
vue项目实现表单登录页保存账号和密码到cookie功能
2018/08/31 Javascript
node创建Vue项目步骤详解
2020/03/06 Javascript
JavaScript运行机制实例分析
2020/04/11 Javascript
vue实现简易计算器功能
2021/01/20 Vue.js
跟老齐学Python之有容乃大的list(2)
2014/09/15 Python
JSON Web Tokens的实现原理
2017/04/02 Python
利用Python自带PIL库扩展图片大小给图片加文字描述的方法示例
2017/08/08 Python
Python matplotlib 画图窗口显示到gui或者控制台的实例
2018/05/24 Python
Python实现的特征提取操作示例
2018/12/03 Python
Python实现将字符串的首字母变为大写,其余都变为小写的方法
2019/06/11 Python
pytorch之添加BN的实现
2020/01/06 Python
基于Python和PyYAML读取yaml配置文件数据
2020/01/13 Python
澳大利亚首个在线预订旅游网站:Wotif
2017/07/19 全球购物
美国羊皮公司:Overland
2018/01/15 全球购物
印度购买眼镜和太阳镜网站:Coolwinks
2018/09/26 全球购物
家乐福台湾线上购物网:Carrefour台湾
2020/09/15 全球购物
如何开启linux的ssh服务
2015/02/14 面试题
2014年消防工作实施方案
2014/02/20 职场文书
自主招生推荐信格式模板
2015/03/24 职场文书
铁人观后感
2015/06/16 职场文书