"Vue3中 router 的变化主要体现在构建选项的调整、base 参数的处理以及捕获所有路由的新规则上。VueRouter 与 Vue.js 的核心紧密结合,使得在Vue3中构建单页面应用更加便捷。本文基于vue-next-router alpha.10 版本进行讨论,对比了与 Vue2.0 中的 VueRouter 的差异。"
在Vue3中,VueRouter进行了多项改进,这些变化有助于开发者更好地适应Vue3的生态系统。以下是一些主要的变化点:
1. 构建选项mode的改变
在Vue2.0中,我们通过`mode: 'history'`来启用HTML5 History 模式。而在Vue3的VueRouter中,这个选项被替换为函数调用形式。现在我们需要使用`createWebHistory()`来创建一个基于浏览器历史的路由。例如:
```javascript
// Vue2.0
const router = new VueRouter({
mode: 'history',
});
// Vue3.0
import { createRouter, createWebHistory } from 'vue-next-router';
const router = createRouter({
history: createWebHistory(),
});
```
同理,对于其他模式,也需相应地使用`createMemoryHistory()`等函数。
2. base参数的处理
在Vue2.0中,我们直接在配置对象中设置`base`属性。但在Vue3的VueRouter中,`base`参数作为`createWebHistory()`的第一个参数传递。例如:
```javascript
// Vue2.0
const router = new VueRouter({
base: __dirname,
});
// Vue3.0
import { createRouter, createWebHistory } from 'vue-next-router';
const router = createRouter({
history: createWebHistory('/'),
});
```
这样使得base的设置更加直观和灵活。
3. 捕获所有路由的新规则
在Vue2.0中,我们通常使用`path: '/user/:a*'`来匹配并捕获所有子路由。然而,在Vue3的VueRouter中,这种方式不再适用。现在需要使用带有自定义正则表达式的参数来定义捕获所有路由,例如:
```javascript
// Vue2.0
const router = new VueRouter({
mode: 'history',
routes: [
{ path: '/user/:a*' },
],
});
// Vue3.0
const router = createRouter({
history: createWebHistory(),
routes: [
{ path: '/:catchAll(.*)', component: CatchAllComponent },
],
});
```
这里的`:catchAll(.*)`是一个自定义正则表达式,用于匹配任何路径。
以上变化是Vue3中VueRouter的主要更新点,它们反映了Vue3对API设计的简化和规范化。开发者在升级到Vue3时,需要注意这些变更,以确保路由配置的正确性和兼容性。理解并掌握这些改动将有助于更好地利用Vue3的路由功能,提高开发效率。