vue-router是vue官方支持的,算是vue.js1的最佳实践。VueRouter类构造函数createMatcher解析路由配置、路径、层级等;根据mode、fallback配置和浏览器history.pushState支持创建对应的history实例(push、replace、go等方法,通过操作history实现);init方法暴露了addRoutes、push、replace、go等路由操作方法;暴露beforeEach、beforeResolve、onReady等钩子函数;2、VueRouter类增加了install方法。该方法第一个参数为Vue构造函数,第二个参数为一个Optional选项对象(Vue插件);src/install.jsVueRouter类的install方法判断Vue是否初始化了Vue-router;注册和销毁是在Vue.mixin中全局混入实现的,使用全局混入会影响后面每一个创建的VueInstance(Vueglobalmixin)。在beforeCreate中this指向Vue组件实例,所有的组件beforeCreate声明循环都会调用这个函数;this.$options.router指的是newVue时传入的Vue-router实例,this.$options.router不为空,说明此时this指向Vue根组件实例;newVue({router,//this.$options.router不为空,说明this指向Vue根组件实例render:h=>h(App)}).$mount('#app')this._routerRoot指向Vue根组件实例,后续所有子组件实例的_routerRoot指向this.$parent._routerRoot,所有子组件的_routerRoot以逐层方式指向根组件实例层转移;添加一个Vue实例属性$router和$route是通过将它们添加到Vue.prototype来实现的。这里只通过Object.defineProperty设置了get方法,防止修改。这样所有的组件都可以通过this.$router和this.$route来操作路由,获取当前的路由信息??。声明全局组件RouterView和RouterLink设置选项合并策略(自定义选项合并策略)src/history/base.jsHistory类,HashHistory和HTML5History都继承自该基类定义go、push、replace、ensureURL、getCurrentLocation方法,由子类决定实现构造函数,初始化属性,处理
