vue 路由

作者: BlinglingSam | 来源:发表于2020-07-12 15:42 被阅读0次

动态路由

使用动态路由配置的(如:‘:id’),可以在this.$router.params.id获得。

官网例子:

模式 匹配路径 $route.params
/user/:username /user/evan { username: 'evan' }
/user/:username/post/:post_id /user/evan/post/123 { username: 'evan', post_id: 123 }

⚠️注意:当使用路由参数时,例如从 /user/foo 导航到 /user/bar,原来的组件实例会被复用。因为两个路由都渲染同个组件,比起销毁再创建,复用则显得更加高效。
不过,这也意味着组件的生命周期钩子不会再被调用。此时可以使用:watch监听$route对象,或者导航守卫beforeRouterUpdate

router和route的区别

前者是全局路由对象,后者是当前路由。

嵌套路由

要注意,以 / 开头的嵌套路径会被当作根路径。 使我们充分的使用嵌套组件而无须设置嵌套的路径。

编程式路由

路由传参数:如果提供了 pathparams 会被忽略

  • router.replace(location, onComplete?, onAbort?) 不会向 history 添加新记录
  • router.push(location, onComplete?, onAbort?) 会向 history 添加新记录

命名视图

同个路由多个视图:如果 router-view 没有设置名字,那么默认为 default

  <router-view class="view one"></router-view>
  <router-view class="view two" name="a"></router-view>
  <router-view class="view three" name="b"></router-view>

导航守卫

  • next('/') 或者 next({ path: '/' }): 跳转到一个不同的地址。当前的导航被中断,然后进行一个新的导航。你可以向 next 传递任意位置对象,且允许设置诸如 replace: truename: 'home' 之类的选项以及任何用在 router-linkto proprouter.push 中的选项。
  • next(error): (2.4.0+) 如果传入 next 的参数是一个 Error 实例,则导航会被终止且该错误会被传递给 router.onError() 注册过的回调。
  router.beforeResolve   在导航被确认之前,同时在所有组件内守卫和异步路由组件被解析之后11,
const router = new VueRouter({
  routes: [
    {
      path: '/foo',
      component: Foo,
      beforeEnter: (to, from, next) => {
        // ...
      }
    }
  ]
})12,beforeRouteEnter 守卫 不能 访问 this,update,leave可以访问this。仅仅是beforeRouterEnter支持next传递回调。

``beforeRouteEnter守卫 不能 访问this,因为守卫在导航确认前被调用,因此即将登场的新组件还没被创建。不过,你可以通过传一个回调给next来访问组件实例。在导航被确认的时候执行回调,并且把组件实例作为回调方法的参数。

beforeRouteEnter (to, from, next) { next(vm => { // 通过vm访问组件实例 }) }

vue-router 配合axios拦截器的操作

//http request拦截器
authedAxios.interceptors.request.use((request) => {
  let res = checkSession()
  console.log('未获取到token,先获取token')
  let token = storage.get('userToken')
  // request.headers['userId'] = token.userId
  request.headers['Authorization'] = `Bearer ${token}`
  return request
}, (err) => {
  // 请求发生错误
  if (err) {
    console.log(err)
    toast.show(err.message)
    return Promise.reject(err)
  }
})

// //http response拦截器
authedAxios.interceptors.response.use((response) => {
  let result = response.data
  if (result.success) {
    return Promise.resolve(result)
  }
  const message = result.message
  toast.show(`操作失败!${message}`)
  return Promise.reject(result)
},(responseError) => {
  if (responseError) {
    switch (error.response.status) {
      case 401:
      // 返回 401 清除token信息并跳转到登录页面
          store.commit(types.LOGOUT);
          router.replace({path: 'login',query: {redirect: router.currentRoute.fullPath}
   })
    }
  }
return Promise.reject(error.response.data) // 返回接口返回的错误信息
})

完整的导航解析流程

  1. 导航被触发。
  2. 在失活的组件里调用离开守卫。
  3. 调用全局的 beforeEach 守卫。
  4. 在重用的组件里调用 beforeRouteUpdate 守卫 (2.2+)。
  5. 在路由配置里调用 beforeEnter
  6. 解析异步路由组件。
  7. 在被激活的组件里调用 beforeRouteEnter
  8. 调用全局的 beforeResolve 守卫 (2.5+)。
  9. 导航被确认。
  10. 调用全局的 afterEach 钩子。
  11. 触发 DOM 更新。
  12. 用创建好的实例调用 beforeRouteEnter 守卫中传给 next 的回调函数。

相关文章

  • Vue应用

    Vue项目 Vue结构 Vue项目打包与发布 Vue语法二 Vue网络请求 Vue路由 动态路由 编程式路由导航

  • vue路由、自定义指令、脚手架

    *Vue vue-router 一、路由 一、导航式路由 路由路径由

  • Vue路由

    一、Vue路由基础用法: 二、Vue路由配置的抽出 三、路由动态传值: 四、路由的跳转方式: 五、路由的hash模...

  • 手写 Vue Router、手写响应式实现、虚拟 DOM 和 D

    Vue-Router 原理实现 一、Vue-Router 动态路由 二、Vue-Router 嵌套路由 三、Vue...

  • 2018-09-19 vue 八

    一 :路由路由:vue-router是Vue的工具库 vue-router.js下载:npm install ...

  • 6 VUE路由

    vue-> SPA应用,单页面应用(引入vue-router.js) 路由嵌套(多层路由): 路由其他信息:

  • vue路由的介绍(二)--vue动态路由和get的传值

    vue动态路由和get的传值---->同属于路由的传参 1,vue动态路由: 动态路由的配置: ①,在配置路由时加...

  • 2018-09-23 路由

    1.路由 路由:vue-router是Vue的工具库 vue-router.js下载:npm install ...

  • 2018-09-19 Vue 第八天

    1.路由 路由:vue-router是Vue的工具库 vue-router.js下载:npm install ...

  • vue路由

    vue路由--- SPA应用,单页面应用vue-resouce 交互vue-router 路由根据不同url地址...

网友评论

    本文标题:vue 路由

    本文链接:https://www.haomeiwen.com/subject/mtagcktx.html