Vue子组件调用$router的底层实现原理
我们引入VueRouter插件之后,想要是用VueRouter的话就需要使用this.$router()方法.这是为啥??为啥在每一个组件里面想要调换都要使用this.$router()呢???
答: 1.在源码中执行install方法的时候,调用了Vue.mixin()方法,具体内容为: 在最上层父元素身上将自己放在了这个routerRoot属性身上,等遇到了子组件的时候回去看看$parent是否存在,存在的话就将自己父元素身上的routerRoot放在了自己的routerRoot身上,这样依次执行,所有的组件就都有了routerRoot属性了,而且这个routerRoot属性就是最上层的Vue实例.
2.在初始化的时候调用了一个ObjecDefinePrototy()方法,在这个最上层Vue实例身上代理上了一个$router属性,getter具体内容为: return this.routerRoot._router(这个_router是在最一开始放置在总Vue身上的属性,这个属性就是传入进来的router实例),这样的话当子组件渲染的时候,调用this.$router属性,自己组件身上没有,就会向上找,找到最上面有$router属性,然后执行了getter方法,这个方法就将自己组件身上的routerRoot._router对象返回了回去.
综上:在所有子组件里面调用的路由跳转方法全都是同一个路由实例对象,在初始化的时候实现了全局共享
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)