Open muwoo opened 6 years ago
多谢分享!最后部分的下一篇文章:vue-router 实现 -- new VueRouter(options),链接给错了,给成了当前这篇文章的链接了~
为了让 _router 的变化能及时响应页面的更新,所以又接着又调用了 Vue.uti.defineReactive方法来进行get和set的响应式数据定义。
Vue.uti.defineReactive 拼写错了...
@Dream4ever @byr-gdp 谢谢,已更正
isDef(i) && isDef(i = i.data) && isDef(i = i.registerRouteInstance)
这一句不理解。 isDef(i = i.data) i = i.data
不是赋值操作嘛。 为啥需要将 i.data 赋值给 i。
Vue 通过 use 方法,加载
VueRouter
中的 install 方法。install 完成 Vue 实例对 VueRouter 的挂载过程。下面我们来分析一下具体的执行过程:在构造
Vue
实例的时候,我们会传入router
对象:此时的
router
会被挂载到 Vue 的跟组件this.$options
选项中。在 option 上面存在 router 则代表是根组件。如果存在this.$options
,则对_routerRoot
和_router
进行赋值操作,之后执行_router.init()
方法。为了让 _router 的变化能及时响应页面的更新,所以又接着又调用了
Vue.util.defineReactive
方法来进行get
和set
的响应式数据定义。然后通过
registerInstance(this, this)
这个方法来实现对router-view
的挂载操作:因为只有 router-view 组件定义了
data.registerRouteInstance
函数。data.registerRouteInstance
主要用来执行 render 的操作,创建 router-view 组件的 Vnode :后续步骤便是为Vue全局实例注册2个属性
$router
和$route
;以及组件RouterView
和RouterLink
。关于
Vue.config.optionMergeStrategies
参考 自定义选项合并策略。下一篇我们会接着介绍一下 VueRouter 实例化的过程 有兴趣可以移步vue-router 实现 -- new VueRouter(options)