VUE 意淫笔记
Vue.js 递归组件实现树形菜单
最近看了 Vue.js 的递归组件,实现了一个最基本的树形菜单。
项目结构:
main.js 作为入口,很简单:
1
2
3
4
5
6
7
8
9
|
import Vue from 'vue' Vue.config.debug = true import main from './components/main.vue' new Vue({ el: '#app' , render: h => h(main) }) |
它引入了一个组件 main.vue:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
<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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
<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 2.0 + Vue Router + Vuex
用 Vue.js 2.x 与相配套的 Vue Router、Vuex 搭建了一个最基本的后台管理系统的骨架。
当然先要安装 node.js(包括了 npm)、vue-cli
项目结构如图所示:
assets 中是静态资源,components 中是组件(以 .vue 为后缀名的文件),store 中是使用了 vuex 的 js 文件。
package.json:
webpack.config.js:
项目的入口 js 文件 main.js:
该文件引用了路由配置文件 routes.js 和主入口的组件 main.vue,其中 main.vue 在 components 目录
routes.js 内容如下:
main.vue 的内容如下:
<template>
<router-view></router-view>
</template>
store.js 在 store 目录,内容如下:
1
2
3
4
5
6
7
8
9
10
|
import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) export default new Vuex.Store({ state: { username: '' } }) |
后台都是登录成功后跳转到主页面
界面的 UI 用的是开源的 element-ui
login.vue 位于 login 目录,内容如下:
在登录事件中,将用户名传递给 store 中的 state.username,以便在其它组件中获取:
store.state.username = this.loginForm.username
登录后的界面,默认跳转到主页:
通过 vuex 获取到了登录的用户名称(caihg);当然,如果刷新当前页面,用户名称就没了。
头部在 container 目录,其中有三个组件
container.vue 的内容如下:
headerNav.vue 中就是头部导航的各种链接:
点击头部的导航,下面的内容相应地切换
其中左侧部分也是导航,点击也要跟随切换
左侧的导航放在 asideContainer 目录
platform.vue 与 product.vue 内容相似;只是前者包括了样式,后者没有(相同的样式写一份就够了,如果多写了,也会重复渲染)
左侧导航对应的内容分别在不同的目录(根据功能划分)
userList.vue 中的内容如下:
<template>
<div>
用户列表的内容
</div>
</template>
至此完成,后台管理系统的大致骨架就是这样了。
项目代码在 github 上
VUE 意淫笔记的更多相关文章
- Vue.js学习笔记(2)vue-router
vue中vue-router的使用:
- Vue.js 组件笔记
Vue 组件总结笔记 一. 创建组件 1. 使用组件三部曲 ( 创建, 注册, 使用 ) 2. 全局组件:Vue.component('tag', {}); 3. 局部组件: components 属 ...
- vue.js 学习笔记3——TypeScript
目录 vue.js 学习笔记3--TypeScript 工具 基础类型 数组 元组 枚举 字面量 接口 类类型 类类型要素 函数 函数参数 this对象和类型 重载 迭代器 Symbol.iterat ...
- Vue.js学习笔记:在元素 和 template 中使用 v-if 指令
f 指令 语法比较简单,直接上代码: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " ...
- JAVA 泛型意淫之旅(二)
编译器如何处理泛型 泛型类编译后长什么样? 接上文,JAVA 泛型意淫之旅1,成功迎娶白富美后,终于迎来了最振奋人心的一刻:造娃!造男娃还是造女娃?对于我们程序猿来说,谁还在乎是男娃女娃,只要是自己的 ...
- 忏悔言情小说带来的意淫以及对治方法 (转自学佛网:http://www.xuefo.net/nr/article55/554935.html)
小时候,因为父母经常吵架,我觉得很孤独,一个人经常孤零零的,就喜欢一个人看书,大人的书难免里面有情情爱爱的内容,结果就很喜欢里面的深情的爱情故事,总是幻想自己有一段爱情.其实就是意淫的开始,所以后来学 ...
- SQL 递归查询,意淫CTE递归的执行步骤
今天用到了sql的递归查询.递归查询是CTE语句with xx as(....)实现的. 假如表Category数据如下. 我们想查找机枪这个子分类极其层次关系(通过子节点,查询所有层级节点).以下是 ...
- vue 自学项目笔记
感觉小青推荐的学习网课, 利用vue 仿制一个去哪网, 学习的东西很多, 在食用之前,需要先确保js 和css 过关 js https://www.bilibili.com/video/av3009 ...
- Vue.js学习笔记 第一篇 数据绑定
双花括号文本插值 先来个最简单的例子,看完之后立马会用Vue了,是不是很有成就感 <!DOCTYPE html> <html> <head> <meta ch ...
随机推荐
- 简单跳转到微信分享,基于libWeiChatSDK 和简单的自定义UIActivityViewController
一.自定义UIActivity: 如果想要自定义UIActivity必须知道UIActivityViewController.首先这个类主要是用于接受字符串,RUL类型和图片类型的数据用于分享和操作的 ...
- 闲来无事——第一弹 Java基础 基本数据类型
一个优秀的Java类一定要去优质的名称,类的命名主要有字母和数字,并且必须以字母开头:虽然说没有明确规定类名首字母要大写,但是实际上如果出现首字母小写的类名,那就呵呵了,坐等挨骂吧!类名首字母大写是业 ...
- CreateFile() 打开u盘 物理设备
//以下是用的vs2010 windows7 64 管理员权限编译成功的 HANDLE hDev = CreateFile(TEXT("\\\\.\\PhysicalDrive1" ...
- linux环境下安装mongodb
最近有用到mongodb,顺便找到了以前的指南,顺便写一篇随笔,以后或许有用到的地方. 第一步:下载mongodb的linux版本,mongodb-linux-x86_64-3.2.4.tgz(去官网 ...
- Linux中仅主机模式下设ip
昨天在项目中接触到了Hadoop,需要用到linux来操作,以前有过接触,大致都忘了,在装备虚拟机的时候,遇到的IP ping不通的问题,模式是仅主机模式,今天分享一下,以便自己以后再遇到,也可以迎 ...
- JavaScript-事件坐标
事件坐标: 1.参照屏幕左上角e.screenX,e.screenY 2.参照文档显示区左上角:e.clientX||e.x , e.clientY||e.y 3.参照所在父元素的左上角:e.offs ...
- MongoDB学习笔记-05 聚合
MongoDB除了基本查询功能之外,还有强大的聚合工具,其中包括:count().distinct().group().mapreduce. 计数函数count count是最简单的聚合工具,用于返回 ...
- iOS进阶_FMDB的简单使用
先引入FMDB第三方,点击查看方法 一.创建表 1.创建sql语句 NSString *createSql = @"create table if not exists t_stude ...
- Linux 常用工具小结:(5) lftp工具使用
Linux 常用工具小结:(1) lftp工具使用. 这里会按照一些比较常用的功能列出,并举一个具体的例子逐一解释功能. 通常使用ftp过程是登陆ftp,浏览ftp内容,下载ftp文件,或者上传ftp ...
- Android--Intent传递对象
Intent 传递对象通常有两种实现方式,Serializable 和 Parcelable: 一.Serializable:序列化,表示将一个对象转换成可存储或可传输的状态,序列化后的对象可以在网络 ...