最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • Vuejs 动态路由文档详解踩坑经验总结

    正文概述 掘金(三猪技术团队)   2021-06-27   442

    文档详解

    下面我们从 Vue Router 官方文档的内容开始讲解

    Vuejs 动态路由文档详解踩坑经验总结

    1. 响应路由参数的变化

      在实际开发中经常需要把某种模式匹配到的所有路由,全都映射到同个组件。例如,我们有一个 User 组件,对于所有 ID 各不相同的用户,都要使用这个组件来渲染。那么,我们可以在 vue-router 的路由路径中使用“动态路径参数”(dynamic segment) 来达到这个效果:

    Vuejs 动态路由文档详解踩坑经验总结

    现在呢,像 /user/foo/user/bar 都将映射到相同的路由。

    一个“路径参数”使用冒号 : 标记。当匹配到一个路由时,参数值会被设置到 this.$route.params,可以在每个组件内使用。于是,我们可以更新 User 的模板,输出当前用户的 ID:

    Vuejs 动态路由文档详解踩坑经验总结

    除了 $route.params 外,$route 对象还提供了其它有用的信息,例如,$route.query (如果 URL 中有查询参数)、$route.hash 等等。

    1. 捕获所有路由或 404 Not found 路由

      复用组件时,你可以简单地 watch (监测变化) $route 对象来监听路由:

    Vuejs 动态路由文档详解踩坑经验总结 ​ 如果想匹配任意路径,我们可以使用通配符(*)

    Vuejs 动态路由文档详解踩坑经验总结

    1. 高级匹配模式

    vue-router 使用 path-to-regexp 作为路径匹配引擎,所以支持很多高级的匹配模式,例如:可选的动态路径参数、匹配零个或多个、一个或多个,甚至是自定义正则匹配。

    1. 匹配优先级

    有时候,同一个路径可以匹配多个路由,此时,匹配的优先级就按照路由的定义顺序:路由定义得越早,优先级就越高。

    踩坑加扩展

    1. Vue Router 动态路由匹配坑点

      ​ 使用 Vue 的小伙伴们应该都知道在 src 目录下有一个 component 文件,我们一般都会把可复用的组件丢到这个文件里。在使用的时候通过 import 的形式将其引入,使用 props 的形式对复用组件进行传递参数。

    Vuejs 动态路由文档详解踩坑经验总结

    ​ 但是有的时候,可能需要整个页面进行复用(或者子页面),这个时候 hash 值一般也会跟着变动。这个时候再去使用上面那种 方式就有点不合适了,所以我们可以采用动态路由的形式来完成这种需求。同样的也是通过新建一个公共Vue组件,然后使用 component 进行引入。

    Vuejs 动态路由文档详解踩坑经验总结

    ​ 然后我们在其他页面中使用编程式的导航,例如 router.push('/dynamic/one') 即可跳转到对应的复用页面中去。在这里也有一个小知识点,我们在 push('/dynamic/one') 的时候是可以拿到穿过来的动态 hash 值的,并且参数也会被存储到 this.$route.params 中的。

    小惊喜

    ​ 作为一个比较流行的框架,肯定在一些细节上处理的比较完善。在对于这种直接拿来复用的页面,也考虑到进一步的性能优化的。所以,当使用路由参数时,例如从 /dynamic/one 导航到 /dynamic/two,原来的组件实例是会被复用的。因为两个路由都渲染了同个组件,比起销毁再创建,复用则显得更加高效。不过这也意味着,组件的生命周期钩子函数就不会再被调用。

    ​ 这个时候 踩坑点 就来了,首先在官方文档中是这么写的。“复用组件时,想对路由参数的变化作出响应的话,你可以简单地watch(监测变化) $route 对象”,这个时候大家都会想着,是不是只要我们进行路由的切换,在 from 组件中使用 watch 就可以监听到页面发生的变化。但是其实我们误会了,这里是有一个要求的,必须是子路由进行跳转,才能被监听到。所以我们去 push 到其他的页面,修改了根 hash 是无法被监听到的。

    ​ 在动态路由匹配这一章其实还有很多的知识点没讲,也有很多坑作者本人也没去填。比如常用的 { path: '*' } 通常用于捕获 客户端 404 错误。

    1. 滚动行为

      ​ 有的时候,业务需求需要我们当页面进行跳转的时候,需要默认定位到某个位置去。其实 Vue Router 已经替我们解决了这个功能。他就是 scrollBehavior 钩子函数。稍微注意一下:这个功能只在支持 history.pushState 的浏览器中可用。

    Vuejs 动态路由文档详解踩坑经验总结

    ​ scrollBehavior 方法接受 to 和 from 路由对象。第三个参数 savedPosition 当且仅当 popstate 导航(通过浏览器的 前进/后退 按钮触发)时才可用。

    如上图所示,其实还有其他的方式写法:

    • { x: number, y:number }

    • { selector: string, offset? : { x: number, y: number }}

    ​ 同样的,有时候我们想切换路由后过个几秒钟,然后再滚动到指定位置。scrollBehavior 也是支持异步滚动的。写法如下所示:

    Vuejs 动态路由文档详解踩坑经验总结

    很多人因为 Vue 是比较容易上手的框架,往往却轻视了它,没有认真的去阅读它的官方文档,其实它也有很多的奇淫巧技可以帮助我们解决业务上的需求,有时候一个小功能就可以解决大需求。不知道这篇文章有没有对你给予到帮助,如果有帮助记得点下关注哦。

    PS:大家看了后觉得对自己有帮助可以三连留言,欢迎提出宝贵意见,也欢迎各位对相关技术有兴趣的开发者(由团队开发人员微信号x118422邀请)入群,在线解答讨论数据可视化、优化图表性能等方面的技术问题~


    起源地下载网 » Vuejs 动态路由文档详解踩坑经验总结

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元