Skip to content

Vue2项目资料:vue-todo Vue Router

vue-router相关配置和注意点

js
new Router({
  routes,
  mode: 'history',
  base: '/base/',  // 通过vue-router跳转的路径默认带上该配置
  linkActiveClass: 'active-link', // 匹配上的link 会带上 class,子路由也包括
  linkExactActiveClass: 'exact-active-link', // 完全匹配的link 带上class,完全匹配,唯一
  scrollBehavior(to, from, savedPosition) {
    // 路由跳转时的位置策略 假设从 /login -> /app
    // to 就是 /app
    // from 就是 /login
    // savedPosition 会记录 当前页面点击的位置
    if (savedPosition) {
      return savedPosition
    } else {
      return {x: 0, y: 0}
    }
  },
  parseQuery(query) {
    // 接受字符串, 转为obj
  },
  stringifyQuery(obj) {
    // 接受obj 转为字符串
  },
  fallback: true, // 浏览器不支持history路由,自动转为hash路由
})

多个 <router-view></router-view>

写 router时

components: { default: CompA, other: Other }

使用于三栏布局,中间固定,切换路由,改左右等等 ~

路由钩子

钩子一定要传和执行 next() 类比 express的next()中间件机制

js
beforeEach((to, from, next) => {
  console.log('before each invoked')
  next()
})

beforeResolve((to, from, next) => {
  console.log('before resolve invoked')
  next()
})

beforeEnter((to, from, next) => {
  console.log('app route before enter')
  next()
})

afterEach((to, from) => {
  console.log('after each invoked')
})

beforeRouteLeave(to, from, next) {
  // 表单,用户点错离开,可以弹框。
}

异步路由

js
// import TodoList from '../views/todo/todo'
// import Login from '../views/login'

export default [
  {
    path: '/',
    redirect: '/todolist'
  },
  {
    path: '/todolist',
    name: 'app',
    component: () => import('../views/todo/todo'),
    meta: {
      title: 'Todo List App',
      description: '一个小而全的 Vue todo 应用'
    }
  },
  {
    path: '/login',
    name: 'login',
    component: () => import('../views/login')
  }
]

直接这样写会报错,可以 npm i babel-plugin-syntax-dynamic-import -D

配置 .babelrc

json
{
  "presets": [
    "env"
  ],
  "plugins": [
    "transform-vue-jsx",
    "syntax-dynamic-import"
  ]
}

共 20 个模块,1301 篇 Markdown 文档。