https://www.bilibili.com/video/av85793766
p2~3
安装
和上次一样创建项目,在vue ui中添加Element UI插件
Idea中导入工程
如果插件在刚才UI中没有装成功,可以在命令行装
使用
Element UI的使用可以看官网手册
Elemnt UI 中文官网
有一些常见的布局方式
导入实例
直接把官网实例复制到App.vue中(html复制到div标签之间)
刷新网页就能看到效果
一些标签说明
el-container: 构建整个⻚面框架
el-menu: 左侧菜单
1 2
| // :default-openeds默认展开的菜单 :default-active默认选中的菜单 <el-menu :default-openeds="['1', '3']" :default-active="1-2">
|
视频里说这个”1-2”必须写成”[1-2]”或则”‘1-2’”才能识别
但是试了一下直接写也识别了
el-submenu: 可展开的菜单
1 2 3 4
| // 菜单的下标,文本类型,不能是数值类型 <el-submenu index="1"> // template:对应 el-submenu 的菜单名 i:设置菜单图标,具体在文档找 <template slot="title"><i class="el-icon-message"></i>导航一</template>
|
需要的话还可以嵌套多级submenu
通过vue router动态构建左侧菜单
配置页面
新建4个页面,在router中配置
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
| import Page1 from '../views/Page1' import Page2 from '../views/Page2' import Page3 from '../views/Page3' import Page4 from '../views/Page4'
const routes = [ { path: '/page1', name: '页面1', component: Page1 }, { path: '/page2', name: '页面2', component: Page2 }, { path: '/page3', name: '页面3', component: Page3 }, { path: '/page4', name: '页面4', component: Page4 }, ]
|
但是这样还不会显示,要在App.vue中加上router对应的页面
1 2 3 4 5 6
| ... </el-container> </el-container> <router-view></router-view> </div> </template>
|
此时相当于App中的内容是本来就显示的,下面的view是附加上去的
这样放显然是有问题的
把它放到main里面
1 2 3 4 5 6 7 8 9 10
| ... <el-main> <router-view></router-view> </el-main>
</el-container> </el-container>
</div> </template>
|
这样就放进去了,下一步把它们连上
遍历router
需要修改router的层级结构
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
| const routes = [ { path: '/', name: '导航1', component:App, children:[ { path: '/page1', name: '页面1', component: Page1 }, { path: '/page2', name: '页面2', component: Page2 }, ] }, { path:'/navigation', name: '导航2', component:App, children:[ { path: '/page3', name: '页面3', component: Page3 }, { path: '/page4', name: '页面4', component: Page4 }, ] }, ]
|
然后在App.vue中读取
1 2 3 4 5 6 7
| <el-aside width="200px" style="background-color: rgb(238, 241, 246)"> <el-menu> <el-submenu v-for="item in $router.options.routes"> <template slot="title"><i class="el-icon-setting"></i>{{item.name}}</template> </el-submenu> </el-menu> </el-aside>
|
就显示出来了
一个小bug
页面一开始是空白的,发现是App没有引入,router中要加
1
| import App from 'vue-router'
|
把内层的元素也读出来
现在点一个导航时,两个会一起展开、合上,因为没有加index
再加上index属性(通过item的下标,item在前,index在后),需要字符串属性,拼一个’’
1 2 3 4 5 6 7 8
| <el-aside width="200px" style="background-color: rgb(238, 241, 246)"> <el-menu> <el-submenu v-for="(item,index) in $router.options.routes" :index="index+''"> <template slot="title"><i class="el-icon-setting"></i>{{index}}-{{item.name}}</template> <el-menu-item v-for="(item2,index2) in item.children" :index="index+'-'+index2">{{item2.name}}</el-menu-item> </el-submenu> </el-menu> </el-aside>
|
就可以定位到每一个了
把App中的内容放到Index页面中
1、给 el-menu 标签添加 router 属性
2、在⻚面中添加 router-view 标签(它是一个容器,可以动态渲染选择的router)
3、el-menu-item 标签的 index 值就是要跳转的 router
默认页面,在router中写redirect
并初始化选中,如果选择则加is-active状态。用route.path获取当前路径
总结
文件结构
App.vue
1 2 3 4 5 6
| <template> <div id="app">
<router-view></router-view> </div> </template>
|
Index.vue
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| <template> <el-container style="height: 500px; border: 1px solid #eee">
<el-aside width="200px" style="background-color: rgb(238, 241, 246)">
<el-menu router :default-openeds="['0','1']"> <el-submenu v-for="(item,index) in $router.options.routes" :index="index+''"> <template slot="title"><i class="el-icon-setting"></i>{{index}}-{{item.name}}</template>
<el-menu-item v-for="item2 in item.children" :index="item2.path" :class="$route.path==item2.path ? 'is-active' : ''">{{item2.path}}-{{item2.name}}</el-menu-item> </el-submenu> </el-menu> </el-aside>
<el-main>
<router-view></router-view> </el-main>
</el-container> </template>
|
index.js
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
| const routes = [ { path: '/', name: '导航1', component:Index, redirect:'page1', children:[ { path: '/page1', name: '页面1', component: Page1 }, { path: '/page2', name: '页面2', component: Page2 }, ] }, { path:'/navigation', name: '导航2', component:Index, children:[ { path: '/page3', name: '页面3', component: Page3 }, { path: '/page4', name: '页面4', component: Page4 }, ] }, ]
|
注意区别:router/route/routes