Vue-Router路由模式的选择和底层原理

本文详细探讨Vue-Router的路由类型,包括Hash模式和History模式的特性,强调History模式对后端配合的需求及IE9兼容问题。深入解析其底层原理,解释如何触发路由更新,并通过源码分析揭示$router和$route如何挂载到Vue实例上,以及router-view和router-link组件的注册过程。适合希望了解Vue-Router工作原理的开发者阅读。
摘要由CSDN通过智能技术生成

1.路由类型

  • Hash模式:丑,无法使用锚点定位。
  • History模式:需要后端配合,IE9不兼容(可使用强制刷新处理IE9不兼容)

即可以根据两种模式的特点来进行路由选择。比如:当你的页面需要很多锚点进行定位时< a href="#new_paper" />,点击改链接跳转到页面的新闻部分,那么Hash模式是无法实现的,因为它自身带了#

2.底层原理

如果我们去看Vue-Router的底层代码可能会优点晦涩难懂,下面总结一下底层原理,有哪些方式可以触发路由的更新呢?下面这张图一目了然:

在这里插入图片描述

理解:

  • Vue.util.defineReactive_route这个工具库把路由的信息变成了响应式数据,而defineReactive()内部就是调用了Object.defineProperty()依赖收集实现了路由信息的响应式,而Vue的data也是通过这种方式实现响应式。
  • 图中左边五种方式都会触发调用updateRoute这个API,这个API的功能是修改路由中的响应式数据,当响应式数据被改变后就会自动触发router-view的更新,router-view会根据url和路由匹配规则进行相应组件的展示。

3.源码拓展

先来学习Vue-router的install()

3.1.1 $router和$route是如何挂载到this上的?
  Object.defineProperty(Vue.prototype, '$router', {
   
    get () {
    return this._routerRoot._router }   //this._routerRoot === this
  })

  Object.defineProperty(Vue.prototype, '$route', {
   
    get () {
    return this._routerRoot._route }   //this._routerRoot === this
  })

在vue-router的install方法中调用Object.defineProperty进行数据劫持,将$router、$route挂载到Vue的原型上。

注意:this._routerRoot其实就是Vue实例this,看下面源码,this._routerRoot指向了this

Vue.mixin({
   
    beforeCreate () {
   
      if (isDef(this.$options
最低0.47元/天 解锁文章
Vue 技术栈 带你探究 vue-router 源码 手写vue-router
超逸の学习技术博客
03-12 1195
现在开始逐步深入Vue 技术栈,想了想,技术栈专栏的主要内容包括: 1、Vue源码分析 2、手把手教 保姆级 撸代码 3、无惧面试,学以致用,继承创新 4、谈谈前端发展与学习心得 5、手写源码技术栈,附上详细注释 6、从源码中学习设计模式,一举两得 7、编程思想的提升及代码质量的提高 8、通过分析源码学习架构,看看优秀的框架 9、项目实战开发 10、面试准备,完善个人简历
vue-router的实现原理
weixin_43183219的博客
05-25 1021
vue-router实现原理,hash模式以及history模式的实现原理
Vue-Router的基本原理
前端初学者
03-31 3871
Vue-Router的使用原理路由实现的两种模式以及优缺点
vue-router路由模式以及底层原理
weixin_34232363的博客
04-14 1178
#vue-router路由模式以及底层原理 路由类型: Hash模式:吃藕,#/...;无法使用锚点定位; History模式:需要后端配合,IE9不支持(可使用强制刷新处理) 复制代码 底层原理通过唐老师的一张图理解: 在vue-router模块中:仍然是利用Object.defineProperty()API,将路由做响应式处理; 当路由跳转的时候,执行updateRoute()函数;在...
知道Vue中router实现的底层原理吗?
夜静天明
10-13 832
在我们了解router的实现原理之前,我们先来聊聊vue路由跳转到底是怎样的吧! 首先,我们知道vue创建的项目其实是一个单页应用。在我们对vue项目进行打包以后,我们所有的代码都会被成一份HTML和一份JS,那我们创建的那么多.vue文件是如何实现通信的呢? 作者:神犬小七 链接:https://juejin.cn/post/7152892881332600839 来源:稀土掘金 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
Vue-Router原理以及简单实现
qq_43271330的博客
09-02 359
Vue-Router原理以及简单实现 @vue/cli项目中的常规用法 import Vue from 'vue' import VueRouter from 'vue-router' // Vue.use()方法注册路由插件,参数为函数直接执行,对象调用对象上的install 方法 Vue.use(VueRouter) import Home from '@/pages/home/index.vue' const routes = [ { path: '/', component: Home
vue-router底层实现原理
chenzeze0707的博客
05-17 5438
定义: vue用来写路由一个插件。包括 router-link、router-view 两个组件,其中 router-link 用于实现跳转,router-view 用于展示视图 vue-router的两种模式 hash模式 hash模式背后的原理是onhashchange事件 因为hash发生变化的url都会被浏览器记录下来,从而你会发现浏览器的前进后退都可以用了,同时点...
vue-router实现原理
m0_62351590的博客
02-14 5122
一、前端路由概念 通过改变 URL,在不重新请求页面的情况下,更新页面视图。 二、vue-Router两种模式 更新视图但不重新请求页面,是前端路由原理的核心之一,目前在浏览器环境中这一功能的实现主要有2种方式: Hash — 默认值,利用 URL 中的hash("#") 、 history-- 利用URL中的路径(/home) 如何设置路由模式 const router=new VueRouter({ mode:'history', routes:[...] }) mode
详解从Vue-router到html5的pushState
10-18
Vue-routerVue.js的官方路由管理器,它和Vue.js的生态系统深度整合。Vue-router允许用户创建单页应用,并通过改变视图来响应不同的路由,而无需重新加载整个页面。在Vue-router中,页面的跳转和数据的更新可以通过...
Vue-router 底层实现原理 源码实现 深度解析
Dark_programmer的博客
02-24 1595
Vue-router 底层原理 1、项目架构 以下文件夹,是我们实现路由原理所需的 boinnie-router文件夹里,是我们要自己实现的vue-router的源码 router文件夹里,是关于路由的配置 views文件夹,是我们存放单文件vue组件的地方 app.js 是我们的根组件 main.js 是我们将组件实现挂载到页面的地方 将文件夹和文件创建好之后,就开始实现vue-router的...
Vuevue-router底层实现原理
最新发布
qq_32019935的博客
03-25 153
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考提示:这里对文章进行总结:例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。
VUE路由原理
路人贾!
07-13 611
VUE路由原理
Vue router原理
日积月累的博客
03-28 4659
总结: vue-routervue项目的重要组成部分,用于构建单页应用。单页应用是基于路由和组件的,路由用于设定访问路径,并将路径和组件映射起来。路由的本质就是建立url和页面之间的映射关系 router 模式 hash / history hash模式vue-router的默认模式。hash指的是url锚点,当锚点发生变化的时候,浏览器只会修改访问历史记录,不会访问服务器重新获取页面。因此可以监听描点值的变化,根据描点值渲染指定dom。 hash监听方法: window.addEventListene
浅析vue-router路由实现原理
HiSen的博客
04-17 2528
前言 通过B站视频和一些童鞋的文章结合GitHub源码阅读来理解路由的实现原理 看过前章vuex状态管理的分享之后,相信对路由这块也是非常感兴趣的,同样的模式,同样的方式,我们走进GitHub之vue-router 同样直接走进 src components:route-link 组件 和 router-view 组件 实现 history:关于浏览器相关,包含 hash模式 , basic...
vue: vueRouter实现原理
qq_36413371的博客
03-19 1093
vuerouter的使用 根据类图进行分析 options记录构造函数传递的对象 routers data中有个属性current,用来记录当前路由地址(data是响应式的) routeMap 记录组件和路由的关系 install静态方法 constructor用来初始化属性 initEvent用来注册popState事件,监听浏览器地址的变化 createRouteMap 把构造函数中的路由规则以键值对存储在routerMap对象中 initComponents用来创建 router-link和r
简述一下路由的几种模式以及实现的原理
qq_66390045的博客
04-13 567
hash 1.url地址上有# 2.实现的原理:原生的hashChange事件,主要是通过事件监听hash值的变化 <a href='#/aaa'>1</a> window.onHashChange=function(){} 3.刷新页面:不会发生请求,页面不会有任何问题,不需要后端配合 history 1.url地址上没有# 2.实现的原理:利用的history api来实现的 popState() pushState()来实现的 3.刷新页面:会发送请求然后会导
Vue-Router原理介绍,手写一个自己的Vue-Router
Coder小何
02-18 518
前置知识 前端路由的两种模式 Hash模式 URL中#后面的内容作为路径地址 监听HashChange事件 根据当前路由地址找到对应的组件重新渲染 History模式 通过history.pushState()方法改变地址栏 监听popstate 事件 根据当前路由地址找到对应组件重新渲染 手写路由的准备工作 新建一个没有vue-routervue项目 在项目中新建router相关文件 新建一个route文件夹,文件夹下新建一个index.js,用于存放路由规则 import Vue from '
Vue-Router 原理实现
weixin_42499553的博客
12-24 585
一.Vue-Router基本使用 在main.js中会将router对象注入到vue实例中,注入vue实例后会创建两个属性$router和$router。第一个是路由规则,第二个为路由实例 在路由规则中可以获取路由信息,在路由实例中可以获得路由方法比如push、go、replace等。此外若在开发插件过程中想要获取路由规则可以通过路由实例中的currentRoute获取路由的规则。 1、动态路由 动态路由有两种传参方式一种是直接通过$route.params.id获取到路由中的id占位,另一种...
浅谈Vue-Router原理
梅花寺
02-13 341
路由的概念相信大部分同学并不陌生,我们在用Vue开发过实际项目的时候都会用到Vue-Router这个官方插件来帮我们解决路由的问题。它的作用就是根据不同的路径映射到不同的视图。本文不再讲述路由的基础使用和API今天我们主要是谈谈Vue-Router的实现原理,感兴趣的小伙伴可以继续往下看,大佬请止步。本文 vue-router 版本为 3.5.3那么到此为止,我们分析了Vue-Router的安装过程,Vue编写插件的时候通常要提供静态的install方法,我们通过时候,就是在执行install方法。
新手指南:从零构建vue2+vue-router2+webpack3项目
2. **Vue-Router2**: Vue-RouterVue.js官方的路由管理器,它允许你通过URL路径来管理应用的视图,实现单页应用的页面跳转和导航。 3. **Webpack3**: Webpack是一个模块打包工具,它可以处理JavaScript、CSS、图片...
写文章

热门文章

  • vue使用prop通信出错:Avoid mutating a prop directly since the value will be overwritten whenever the parent 46023
  • 阮一峰老师 CSS Grid 网格布局教程(转载) 31747
  • 前端如何根据后端返回的文本数据进行换行显示? 22736
  • Vue中读取本地图片实现预览和上传 14383
  • JavaScript 疑难、易错笔试选择题+分析 12922

分类专栏

  • 精选文章集合
  • React 14篇
  • 微前端 1篇
  • django 2篇
  • ElementUI 4篇
  • bug的解决方案 14篇
  • 网络 14篇
  • 前端面试 6篇
  • 前端优化 1篇
  • vue 31篇
  • javaScript 35篇
  • 布局效果 29篇
  • 浏览器 3篇
  • typescript 1篇
  • 源码学习 6篇
  • 阿里云服务器搭建 3篇
  • 力扣题库 4篇
  • HTML5 13篇
  • 思维导图 1篇
  • 计算机网络 6篇
  • node.js后端 12篇
  • 数据结构 12篇
  • webpack 12篇
  • github 2篇
  • vscode配置 1篇
  • angular 3篇
  • 操作系统 2篇

最新评论

  • 前端开发 vscode推荐使用的插件以及屏幕取色与测量像素的工具 前端必备

    fufu39: 工具没用

  • Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by

    叶荷同学: 这个该死的ALTER user'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你数据库的密码'; 这串代码把我害惨了 搞得我数据库密码变成了'你数据库的密码‘

  • webpack项目优化高级特性:代码分割、分块打包、动态导入、按需加载

    竺柒: element ui组件库还能不能做动态导入,打包的时候就是单文件形式存在,文件的命名就是组件名,求告知,谢谢博主表情包

  • webpack项目优化高级特性:代码分割、分块打包、动态导入、按需加载

    自己瞎琢磨: 很好的文章,love from China

  • Vue封装 轮播图 组件 (传入链接、图片即可使用)

    一只毛线: 轮播图的图片在哪里呀

大家在看

  • 【分布式微服务云原生】《Redis 数据持久化与高可用高并发实战指南》 486
  • 【分布式微服务云原生】《Redis 缓存污染问题全解析及淘汰策略深度探索》 729
  • LabVIEW自动化流动返混实验系统
  • 深夜重磅了,自用的抖音养号工具【抖挺好】拿出来免费分享了,有实操演示 273
  • 日期大写 - 支票日期大写 - 数字日期转为中文大写

最新文章

  • 【JS public、private、protected 不知道怎么区分?】
  • Nginx 正反代理、负载均衡及负载均衡导致session不共享的解决方案
  • 【antd 的Upload组件onChange方法只执行一次file.status===‘uploading‘,走不到‘done‘的原因和解决方法】
2024年1篇
2023年1篇
2022年8篇
2021年23篇
2020年167篇
2019年4篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳坪山网站建设公司台州网站如何优化网站优化培训机构北京企业网站优化价格大沥网站优化托管西安网站优化外包连云港专业网站优化保定网站搜索优化排名要多少钱香蜜湖公司网站优化南京优化网站排名靠前百度至尊标王泾县网站seo优化排名网站后端性能优化措施黄山网站优化网站的优化选拔火27星要南昌网站关键词优化眉山优化网站咨询临湘优化网站网站关键词的优化内容山西孝义网站优化天津网站优化推广怎么收费新密市网站seo优化排名太和优化型网站如何优化网站良性发展浙江营销型网站优化平台网站怎么优化称赞火26星至昌乐网站关键词优化惠州网站优化公司遂宁德阳网站优化嘉兴网站排名优化报价普陀区专业网站优化方案香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

深圳坪山网站建设公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化