Vue
插件
静态属性
VueRouter.install: (Vue: Function) => void
用属性VueRouter.install.installed: boolean
标识是否已经install
,避免重复操作,另对比app
,支持多个根节点共享路由实例
Vue.mixin
在实例生命周期中做操作beforeCreate
hook中,将配置了router
VueRouter实例的组件视为路由根节点,init
函数_routerRoot
属性,为 此组件$router
为 VueRouter实例$route
为 当前匹配路由
在VueRouter实例中,监听
history
变化,更新_routerRoot._route
即做到每次获取$route
都是当前路由
<router-link>
、<router-view>
Vue
配置处理项:Vue.config.optionMergeStrategies
等于
created
beforeRouteEnter
beforeRouteLeave
beforeRouteUpdate
根据配置的不同
mode
,用不同的history
做历史管理 根据配置的routes
,做正则、别名、重定向等匹配、跳转操作
app: VueComponent
路由根节点
history
变化的时候,更新app._route
apps: VueComponent[]
支持多个路由根节点
options: RouterOptions
mode: 'hash'|'history'|'abstract'
history: HashHistory | HTML5History | AbstractHistory
继承基类
History
beforeRouteLeave
Vue.extend(component).options['hookName']
拿到Vue
处理过的组件函数bind
绑定instance
上下文router.beforeHooks
beforeRouteUpdate
RouteConfig.beforeEnter
兼容以下两种形式,即把
resolve
和reject
传给函数,再传给return
值的then
webpack dynamic imports (opens new window)
resolve => resolve(Component)
resolve => require(['./Foo.vue'], resolve)
() => Promise<Component>
() => import('./Foo.vue')
replace
/ push
处理history,并用匹配的组件在对应的位置更新页面beforeRouteEnter
router.resolveHooks
popstate
事件缓存上一个页面以时间戳为key的滚动数据,并取出当前页面的数据做滚动处理
sessionStorage
的缓存+缓存最大历史数HashHistory
mode==='hash'
window.history
window.addEventListener('popstate'|'hashchange')
window.history.replaceState
/ window.location.replace('xxx')
window.history.pushState
/ window.location.hash='xxx'
HTML5History
mode==='history'
window.history
window.addEventListener('popstate')
window.history.replaceState
window.history.pushState
AbstractHistory
mode==='abstract'
stack
历史栈,index
做当前指针matcher: Matcher
匹配器,路径匹配做‘跳转’(组件替换)、高亮
path
都处理为绝对路径path-to-regexp
做正则匹配规则alias
重复处理,即用alias
解析后作为path
再做一次存储用于快速路径匹配,获取
RouteRecord
pathList
所有
path
以此数组做匹配的先后顺序(*
值排在最后) 匹配中没有指明name
,有path
的,循环pathList
,取pathMap
中的RouteRecord
做正则匹配,获取Route
pathMap
以
path
为key存储RouteRecord
nameMap
以
name
为key存储RouteRecord
匹配中指明name
的,直接由nameMap
获取Route
RouteRecord
beforeHooks
resolveHooks
afterHooks
activeClass
> linkActiveClass
> router-link-active
exactActiveClass
> linkExactActiveClass
> router-link-exact-active
默认
click
考虑Weex
环境没有event.preventDefault
target="_blank"
scopedSlot
支持
提供数据,组件整个按默认插槽渲染返回
tag
非a
支持
<a>
,则将组件上的事件和属性都加到这个<a>
上<a>
,事件加到本组件上匹配路由的占位组件 函数式组件(无需管理状态、不用生命周期、只接收些prop) 配置
functional
为true
{
functional: true,
// Props 是可选的
props: {
// ...
},
// 为了弥补缺少的实例
// 提供第二个参数作为上下文
render: function (createElement, context) {
// ...
}
}
context.parent.$createElement
做元素的创建,而不用createElement
用父节点的上下文渲染组件 可以实现在
<router-view>
内定义<slot name="slotName">
keep-active
的缓存组件存在父节点对象上
parent._routerViewCache
<router-view>
中的匹配同步$route.matched
对象
matched
的父子关系
routerView: boolean
routerViewDepth: number
路由组件的判断依据:放置
$route.matched
的第depth
项的配置name
组件
$parent
,累计routerView
为true
的组件数$route.matched
的下标$route.matched[depth].instances
存放组件实例
router-view
创建的时候
Vue.mixin
beforeCreate
hook中赋值,destroyed
hook中置空component
实例重复用于不同的router-view
中时<router-view>
传递的属性值和插槽
props
attrs
express-urlrewrite
(opens new window)resolve.alias['vue-router']
为本工程相对路径
beforeEnter
可以直接放到配置的routes
的某一层组件上String
类型,会获取本实例的此属性/**
* 多个根节点共享路由组件
*/
const router = new VueRouter({})
const routerVue = Vue.extend({router})
new routerVue({
el: '.app1'
})
new routerVue({
el: '.app2'
})
/**
* 路由实例的嵌套
*/
const routerOut = new VueRouter({
mode: 'history',
routes: [
{
path: '/nested-router',
component: {
router: new VueRouter({
mode: 'abstract',
routes: []
}),
template: '<div><router-view/></div>'
}
}
]
})
flow-bin
babel-preset-flow-vue
eslint-plugin-flowtype
types
目录/^(v\d+\.\d+\.\d+(-(alpha|beta|rc.\d+))?$)|((revert: )?(feat|fix|docs|style|refactor|perf|test|workflow|ci|chore|types|build)(\(.+\))?: .{1,50})/
← vue-lazyload vue@3.x →