Vue 动态路由
现在很多人还是在默默的一个个功能页去配置管理路由, 目录管理 -> 导入.vue
文件 -> 路由配置 -> 页面上应用. 当应用越来越大, 这一套流程的管理会变得越来越繁杂和臃肿. 修改起来也特别麻烦.
假如某文件夹下的目录能自动生成对应路由那就方便多了. 即假如我在 page
文件下添加 a.vue
文件, 那么我就可以从 http://localhost:8080/#/page/a
中访问到该组件. 我不用再去 router.js
那里 import
组件并配置路由路径.
想要实现这个功能主要有两个知识点, 一个是动态路由 (opens new window), 一个是动态组件 (opens new window).
动态路由:
const router = new VueRouter({
routes: [
// 动态路径参数以冒号开头
{ path: '/page/:path', component: Home }
]
})
1
2
3
4
5
6
7
2
3
4
5
6
7
this.$route.params.path
可以获取到 path
参数
动态组件:
<component v-bind:is="name"></component>
1
:is
是动态组件的用法, 当 name
变化, 组件就会发生变化.
所以我们可以在动态组件中实时计算路由变化.
// 需要使用 vue-async-computed 插件
asyncComputed: {
name() {
// 获取 this.$route.params 中的参数
const path = this.$route.params.path
if (path) {
// 根据 path 导入组件并 return
// webpackChunkName 的作用是定义打包后的文件名称
// [webpack中动态import()打包后的文件名称定义_逝水流光的博客-CSDN博客](https://blog.csdn.net/javao_0/article/details/85162458)
return import(/* webpackChunkName: "[request]" */ `@page/${path}`)
.then(res => {
return res.default
})
.catch(err => {
console.log('TCL: name -> err', err)
this.$router.push('/404')
})
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
组件就会根据 path
改变自动改变
简化的主要流程:
动态路由监听路由变化
浏览器输入
http://localhost:8080/#/page/a
, 路由发生变化this.$route.params
中获取动态路由的参数, 发现动态路由的参数为a
动态组件中导入
page
文件下的a.vue
文件动态组件更新, 渲染到页面
附上源码: main.js (opens new window), Home.vue (opens new window), router.js (opens new window)
编辑 (opens new window)
上次更新: 11/12/2020, 6:27:50 AM
- 01
- 搭配 Jenkins 实现自动化打包微前端多个项目09-15
- 02
- 自动化打包微前端多个项目09-15
- 03
- el-upload 直传阿里 oss 并且显示自带进度条和视频回显封面图06-05