Route 定义

router.map 替换

路由现在被定义为一个在 router 实例里的一个 routes 选项数组。所以这些路由:

  1. router.map({
  2. '/foo': {
  3. component: Foo
  4. },
  5. '/bar': {
  6. component: Bar
  7. }
  8. })

会以这种方式定义:

  1. var router = new VueRouter({
  2. routes: [
  3. { path: '/foo', component: Foo },
  4. { path: '/bar', component: Bar }
  5. ]
  6. })

考虑到不同浏览器中遍历对象不能保证会使用相同的 property 顺序,这种数组的语法可以保证更多可预测的路由匹配。

升级路径

运行 迁移助手 找到 router.map 被调用的示例。

router.on 移除

如果你需要在启动的 app 时通过代码生成路由,你可以动态地向路由数组推送定义来完成这个操作。举个例子:

  1. // 普通的路由
  2. var routes = [
  3. // ...
  4. ]
  5. // 动态生成的路由
  6. marketingPages.forEach(function (page) {
  7. routes.push({
  8. path: '/marketing/' + page.slug
  9. component: {
  10. extends: MarketingComponent
  11. data: function () {
  12. return { page: page }
  13. }
  14. }
  15. })
  16. })
  17. var router = new Router({
  18. routes: routes
  19. })

如果你需要在 router 被实例化后增加新的路由,你可以把 router 原来的匹配方式换成一个包括你新添的加路由的匹配方式:

  1. router.match = createMatcher(
  2. [{
  3. path: '/my/new/path',
  4. component: MyComponent
  5. }].concat(router.options.routes)
  6. )

升级路径

运行 迁移助手 找到 router.on 被调用的示例。

router.beforeEach changed

router.beforeEach 现在是异步工作的,并且携带一个 next 函数作为其第三个参数。

  1. router.beforeEach(function (transition) {
  2. if (transition.to.path === '/forbidden') {
  3. transition.abort()
  4. } else {
  5. transition.next()
  6. }
  7. })
  1. router.beforeEach(function (to, from, next) {
  2. if (to.path === '/forbidden') {
  3. next(false)
  4. } else {
  5. next()
  6. }
  7. })

subRoutes 换名

出于 Vue Router 和其他路由库一致性的考虑,重命名为children

升级路径

运行 迁移助手 找到 subRoutes 选项的示例。

router.redirect 替换

现在用一个路由定义的选项作为代替。举个例子,你将会更新:

  1. router.redirect({
  2. '/tos': '/terms-of-service'
  3. })

成像下面的routes配置里定义的样子:

  1. {
  2. path: '/tos',
  3. redirect: '/terms-of-service'
  4. }

升级路径

运行 迁移助手 找到 router.redirect 被调用的示例。

router.alias 替换

现在是你进行 alias 操作的路由定义里的一个选项。举个例子,你需要在你的routes定义里将:

  1. router.alias({
  2. '/manage': '/admin'
  3. })

配置这个样子:

  1. {
  2. path: '/admin',
  3. component: AdminPanel,
  4. alias: '/manage'
  5. }

如果你需要进行多次 alias 操作,你也可以使用一个数组语法去实现:

  1. alias: ['/manage', '/administer', '/administrate']

升级路径

运行迁移助手找到 router.alias 被调用的示例。

任意的 Route 属性 替换

现在任意的 route 属性必须在新 meta 属性的作用域内,以避免和以后的新特性发生冲突。举个例子,如果你以前这样定义:

  1. '/admin': {
  2. component: AdminPanel,
  3. requiresAuth: true
  4. }

你现在需要把它更新成:

  1. {
  2. path: '/admin',
  3. component: AdminPanel,
  4. meta: {
  5. requiresAuth: true
  6. }
  7. }

如果在一个路由上访问一个属性,你仍然会通过 meta 。举个例子:

  1. if (route.meta.requiresAuth) {
  2. // ...
  3. }

升级路径

运行 迁移助手 找到任意的路由不在 meta 作用域下的示例。

URL 中的 Query 数组 [] 语法 移除

当传递数组给 query 参数时,URL 语法不再是 /foo?users[]=Tom&users[]=Jerry,取而代之,新语法是 /foo?users=Tom&users=Jerry,此时 $route.query.users 将仍旧是一个数组,不过如果在该 query 中只有一个参数:/foo?users=Tom,当直接访问该路由时,vue-router 将无法知道我们期待的 users 是个数组。因此,可以考虑添加一个计算属性并且在每个使用 $route.query.users 的地方以该计算属性代替:

  1. export default {
  2. // ...
  3. computed: {
  4. // 此计算属性将始终是个数组
  5. users () {
  6. const users = this.$route.query.users
  7. return Array.isArray(users) ? users : [users]
  8. }
  9. }
  10. }