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