• Route 定义
    • router.map 替换
      • 升级路径
    • router.on 移除
      • 升级路径
    • router.beforeEach changed
    • subRoutes 换名
      • 升级路径
    • router.redirect 替换
      • 升级路径
    • router.alias 替换
      • 升级路径
    • 任意的 Route 属性 替换
      • 升级路径
    • URL 中的 Query 数组 [] 语法 移除

    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. }