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 密码强度验证规则、打分、验证(给出前端代码,后端代码可根据强度规则翻译)
May 18 Javascript
js中的replace方法使用介绍
Oct 28 Javascript
js浏览器本地存储store.js介绍及应用
May 13 Javascript
Javascript基础知识(一)核心基础语法与事件模型
Sep 29 Javascript
javascript实现图片跟随鼠标移动效果的方法
May 13 Javascript
JavaScript trim 实现去除字符串首尾指定字符的简单方法
Dec 27 Javascript
vue检测对象和数组的变化分析
Jun 30 Javascript
layui radio性别单选框赋值方法
Aug 15 Javascript
vue.js父子组件通信动态绑定的实例
Sep 28 Javascript
JavaScript常用工具方法封装
Feb 12 Javascript
ES6入门教程之let、const的使用方法
Apr 13 Javascript
微信小程序Echarts图表组件使用方法详解
Jun 25 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 var_export与var_dump 输出的不同
2013/08/09 PHP
php生成缩略图示例代码分享(使用gd库实现)
2014/01/20 PHP
php可变长参数处理函数详解
2017/02/22 PHP
PHP实现的redis主从数据库状态检测功能示例
2017/07/20 PHP
经常用的图片在容器中的水平垂直居中实例
2007/06/10 Javascript
JavaScript Accessor实现说明
2010/12/06 Javascript
NodeJS中利用Promise来封装异步函数
2015/02/25 NodeJs
JS实现带关闭功能的阿里妈妈网站顶部滑出banner工具条代码
2015/09/17 Javascript
JS跨域交互(jQuery+php)之jsonp使用心得
2016/07/01 Javascript
jQuery tip提示插件(实例分享)
2017/04/28 jQuery
微信小程序图片自适应支持多图实例详解
2017/06/21 Javascript
ReactNative页面跳转Navigator实现的示例代码
2017/08/02 Javascript
vue按需加载组件webpack require.ensure的方法
2017/12/13 Javascript
vue 过滤器filter实例详解
2018/03/14 Javascript
Nodejs中的JWT和Session的使用
2018/08/21 NodeJs
vue-cli3.0使用及部分配置详解
2018/08/29 Javascript
layer弹出框确定前验证:弹出消息框的方法(弹出两个layer)
2019/09/21 Javascript
js脚本中执行java后台代码方法解析
2019/10/11 Javascript
echarts.js 动态生成多个图表 使用vue封装组件操作
2020/07/19 Javascript
python处理图片之PIL模块简单使用方法
2015/05/11 Python
浅谈配置OpenCV3 + Python3的简易方法(macOS)
2018/04/02 Python
python numpy--数组的组合和分割实例
2020/02/24 Python
Python常用base64 md5 aes des crc32加密解密方法汇总
2020/11/06 Python
将不规则的Python多维数组拉平到一维的方法实现
2021/01/11 Python
世界首屈一指的在线男士内衣权威:HisRoom
2017/08/05 全球购物
Ibatis的核心配置文件都有什么
2014/09/08 面试题
联想C++笔试题
2012/06/13 面试题
分别介绍一下Session Bean和Entity Bean
2015/03/13 面试题
DIY手工制作经营店创业计划书
2014/02/01 职场文书
《中国的气候》教学反思
2014/02/23 职场文书
国防教育标语
2014/10/08 职场文书
婚前协议书范本两则
2014/10/16 职场文书
群众路线教育实践活动实施方案
2014/10/31 职场文书
廉政承诺书范文
2015/04/28 职场文书
2019年怎样写好导游词?
2019/07/02 职场文书
浅谈为什么我的 z-index 又不生效了
2022/07/15 HTML / CSS