文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Vue Router 在实际项目中用到的 10 条高级技巧

2024-12-03 05:29

关注

它和 Vue.js 的核心深度集成,让构建单页面应用变得易如反掌。

[[397463]]

包含的功能有:

本文是作者是实际项目中遇到的一些总结,主要包括:

  1. 响应路由参数变化
  2. 路由匹配
  3. 高级匹配模式
  4. 匹配优先级
  5. push和replace的第二个第三个参数
  6. 路由视图
  7. 重定向
  8. 使用props解耦$route
  9. 导航守卫
  10. 守卫的next方法

希望本文对你有所帮助。

正文

1. 响应路由参数变化

针对复用组件(只是路由参数发生改变),生命周期函数钩子不会被调用,如何能刷新组件了?

watch监听 

  1. watch: { 
  2.   '$route' (tofrom) { 
  3.   // 对路由变化作出响应... 
  4.   } 

beforeRouteUpdate 

  1. beforeRouteUpdate (tofromnext) { 
  2. // react to route changes... 
  3. / / don't forget to call next() 

2. 路由匹配 

  1. // 会匹配所有路径 
  2. path: '*' 
  3. // 会匹配以 `/user-` 开头的任意路径 
  4. path: '/user-*' 

注意:当使用通配符路由时,请确保路由的顺序是正确的,也就是说含有通配符的路由应该放在最后。路由 { path: '*' } 通常用于客户端 404 错误。

如果你使用了History 模式,请确保正确配置你的服务器。

当使用一个通配符时,$route.params 内会自动添加一个名为 pathMatch 参数。

它包含了 URL 通过通配符被匹配的部分: 

  1. // 给出一个路由 { path: '/user-*' } 
  2. this.$router.push('/user-admin'
  3. this.$route.params.pathMatch // 'admin' 
  4. // 给出一个路由 { path: '*' } 
  5. this.$router.push('/non-existing'
  6. this.$route.params.pathMatch // '/non-existing' 

3. 高级匹配模式 

  1. // 命名参数必须有"单个字符"[A-Za-z09]组成 
  2.   
  3. // ?可选参数 
  4. { path: '/optional-params/:foo?' } 
  5. // 路由跳转是可以设置或者不设置foo参数,可选 
  6. to="/optional-params">/optional-params 
  7. to="/optional-params/foo">/optional-params/foo 
  8.   
  9. // 零个或多个参数 
  10. { path: '/optional-params './views/Number.vue'
  11.  
  12. // 组件获取 
  13. export default
  14.   props: ['name'

9. 导航守卫

1. 三种全局守卫

  1. // 入口文件 
  2. import router from './router' 
  3.   
  4. // 全局前置守卫 
  5. router.beforeEach((tofromnext) => { 
  6. console.log('beforeEach 全局前置守卫'); 
  7. next(); 
  8. }); 
  9. // 全局解析守卫 
  10. router.beforeResolve((tofromnext) => { 
  11. console.log('beforeResolve 全局解析守卫'); 
  12. next(); 
  13. }); 
  14. // 全局后置守卫 
  15. router.afterEach((tofrom) => { 
  16. console.log('afterEach 全局后置守卫'); 
  17. }); 

2. 路由独享守卫

beforeEnter全局前置守卫进入路由之前。 

  1.   path: '/number/:name'
  2.   props: true
  3.   name'number'
  4.   // 路由独享守卫 
  5.   beforeEnter: (tofromnext) => { 
  6.       console.log('beforeEnter 路由独享守卫'); 
  7.       next(); 
  8.   }, 
  9.   component: () => import(  './views/Number.vue'

 

3. 组件内守卫

  1. beforeRouteEnter(tofromnext) { 
  2.   // 在渲染该组件的对应路由被 confirm 前调用 
  3.   // 不!能!获取组件实例 `this` 
  4.   // 因为当守卫执行前,组件实例还没被创建 
  5.   console.log('beforeRouteEnter 组件内进入守卫'); 
  6.   next(); 
  7. }, 
  8. beforeRouteUpdate(tofromnext) { 
  9.   // 在当前路由改变,但是该组件被复用时调用 
  10.   // 举例来说,对于一个带有动态参数的路径 /foo/:id,在 /foo/1 和 /foo/2 之间跳转的时候, 
  11.   // 由于会渲染同样的 Foo 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用。 
  12.   // 可以访问组件实例 `this` 
  13.   console.log('beforeRouteUpdate 组件内更新守卫'); 
  14.   next(); 
  15. }, 
  16. beforeRouteLeave(tofromnext) { 
  17.   // 导航离开该组件的对应路由时调用 
  18.   // 可以访问组件实例 `this` 
  19.   console.log('beforeRouteLeave 组件内离开守卫'); 
  20.   next(); 

10. 守卫的 next 方法

最后

最终还是希望大家多看看文档,理解了再去使用到项目中,不至于使用之后出现 bug,谢谢。

 

来源:Segmentfault.com内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯