[{"data":1,"prerenderedAt":8051},["ShallowReactive",2],{"page-\u002Fvue\u002Fvue路由history模式分析":3},{"id":4,"title":5,"body":6,"description":8044,"extension":8045,"meta":8046,"navigation":285,"path":8047,"seo":8048,"stem":8049,"__hash__":8050},"content\u002FVue\u002FVue路由History模式分析.md","Vue路由History模式分析",{"type":7,"value":8,"toc":8038},"minimark",[9,13,46,50,107,117,120,133,200,868,899,1329,1358,5071,5128,8016,8019,8025,8028,8034],[10,11,5],"h1",{"id":12},"vue路由history模式分析",[14,15,16,20,21,24,25,27,28,30,31,34,35,37,38,41,42,45],"p",{},[17,18,19],"code",{},"Vue-router","是",[17,22,23],{},"Vue","的核心组件，主要是作为",[17,26,23],{},"的路由管理器，",[17,29,19],{},"默认",[17,32,33],{},"hash","模式，通过引入",[17,36,19],{},"对象模块时配置",[17,39,40],{},"mode","属性可以启用",[17,43,44],{},"history","模式。",[47,48,49],"h2",{"id":49},"描述",[14,51,52,54,55,57,58,54,61,64,65,67,68,70,71,54,73,75,76,54,79,82,83,85,86,88,89,91,92,95,96,98,99,102,103,106],{},[17,53,19],{},"的",[17,56,33],{},"模式使用",[17,59,60],{},"URL",[17,62,63],{},"Hash","来模拟一个完整的",[17,66,60],{},"，当",[17,69,60],{},"改变时页面不会重新加载，而",[17,72,19],{},[17,74,44],{},"模式是充分利用",[17,77,78],{},"history.pushState",[17,80,81],{},"API","来完成",[17,84,60],{},"跳转，同样在页面跳转时无须重新加载页面，当然也不会对于服务端进行请求，当然对于",[17,87,44],{},"模式仍然是需要后端的配置支持，由于应用是个单页客户端应用，如果后台没有正确的配置，当用户在浏览器直接访问",[17,90,60],{},"时就会返回",[17,93,94],{},"404","，所以需要在服务端增加一个覆盖所有情况的候选资源，如果",[17,97,60],{},"匹配不到任何静态资源时，则应该返回同一个",[17,100,101],{},"index.html","应用依赖页面，例如在",[17,104,105],{},"Nginx","下的配置。",[108,109,114],"pre",{"className":110,"code":112,"language":113},[111],"language-text","location \u002F {\n  try_files $uri $uri\u002F \u002Findex.html;\n}\n","text",[17,115,112],{"__ignoreMap":116},"",[47,118,119],{"id":119},"分析",[14,121,122,124,125,128,129,132],{},[17,123,19],{},"源码的实现比较复杂，会处理各种兼容问题与异常以及各种条件分支，文章分析比较核心的代码部分，精简过后的版本，重要部分做出注释，",[17,126,127],{},"commit id","为",[17,130,131],{},"560d11d","。",[14,134,135,136,139,140,143,144,147,148,151,152,155,156,159,160,162,163,165,166,169,170,173,174,176,177,180,181,184,185,188,189,192,193,188,196,199],{},"首先是在定义",[17,137,138],{},"Router","时调用",[17,141,142],{},"Vue.use(VueRouter)","，这是",[17,145,146],{},"Vue.js","插件的经典写法，给插件对象增加",[17,149,150],{},"install","方法用来安装插件具体逻辑，此时会调用",[17,153,154],{},"VueRouter","类上的静态方法，即",[17,157,158],{},"VueRouter.install = install","，",[17,161,150],{},"模块主要是保证",[17,164,19],{},"只被",[17,167,168],{},"use","一次，以及通过",[17,171,172],{},"mixin","在",[17,175,23],{},"的生命周期",[17,178,179],{},"beforeCreate","内注册实例，在",[17,182,183],{},"destroyed","内销毁实例，还有定义",[17,186,187],{},"$router","与",[17,190,191],{},"$route","属性为只读属性以及",[17,194,195],{},"\u003Crouter-view>",[17,197,198],{},"\u003Crouter-link>","全局组件的注册。",[108,201,205],{"className":202,"code":203,"language":204,"meta":116,"style":116},"language-javascript shiki shiki-themes github-light github-dark","\u002F\u002F dev\u002Fsrc\u002Finstall.js line 6\nexport function install (Vue) {\n  if (install.installed && _Vue === Vue) return\n  install.installed = true \u002F\u002F 保证 Vue-router 只被 use 一次\n\n  _Vue = Vue\n\n  const isDef = v => v !== undefined\n\n  const registerInstance = (vm, callVal) => {\n    let i = vm.$options._parentVnode\n    if (isDef(i) && isDef(i = i.data) && isDef(i = i.registerRouteInstance)) {\n      i(vm, callVal)\n    }\n  }\n\n  Vue.mixin({\n    beforeCreate () { \u002F\u002F 注册实例\n      if (isDef(this.$options.router)) { \u002F\u002F this.$options.router 来自于 VueRouter 的实例化 \u002F\u002F 判断实例是否已经挂载\n        this._routerRoot = this\n        this._router = this.$options.router\n        this._router.init(this) \u002F\u002F \u002F\u002F 调用 VueRouter 的 init 方法 \u002F\u002F 后文会说明 init 方法的作用\n        Vue.util.defineReactive(this, '_route', this._router.history.current)\n      } else {\n        this._routerRoot = (this.$parent && this.$parent._routerRoot) || this \u002F\u002F 将组件的 _routerRoot 都指向根 Vue 实例\n      }\n      registerInstance(this, this)\n    },\n    destroyed () { \u002F\u002F 销毁实例 即挂载undefined\n      registerInstance(this)\n    }\n  })\n\n  Object.defineProperty(Vue.prototype, '$router', {\n    get () { return this._routerRoot._router }\n  })\n\n  Object.defineProperty(Vue.prototype, '$route', {\n    get () { return this._routerRoot._route }\n  })\n\n  Vue.component('RouterView', View) \u002F\u002F 注册全局组件 \u003Crouter-view>\n  Vue.component('RouterLink', Link) \u002F\u002F 注册全局组件 \u003Crouter-link>\n\n  const strats = Vue.config.optionMergeStrategies\n  \u002F\u002F use the same hook merging strategy for route hooks\n  strats.beforeRouteEnter = strats.beforeRouteLeave = strats.beforeRouteUpdate = strats.created\n}\n","javascript",[17,206,207,216,240,264,280,287,298,303,330,335,365,379,416,425,431,437,442,453,465,490,504,520,546,572,583,614,620,637,643,654,665,670,676,681,708,724,729,734,756,770,775,780,799,817,822,835,841,862],{"__ignoreMap":116},[208,209,212],"span",{"class":210,"line":211},"line",1,[208,213,215],{"class":214},"sJ8bj","\u002F\u002F dev\u002Fsrc\u002Finstall.js line 6\n",[208,217,219,223,226,230,234,237],{"class":210,"line":218},2,[208,220,222],{"class":221},"szBVR","export",[208,224,225],{"class":221}," function",[208,227,229],{"class":228},"sScJk"," install",[208,231,233],{"class":232},"sVt8B"," (",[208,235,23],{"class":236},"s4XuR",[208,238,239],{"class":232},") {\n",[208,241,243,246,249,252,255,258,261],{"class":210,"line":242},3,[208,244,245],{"class":221},"  if",[208,247,248],{"class":232}," (install.installed ",[208,250,251],{"class":221},"&&",[208,253,254],{"class":232}," _Vue ",[208,256,257],{"class":221},"===",[208,259,260],{"class":232}," Vue) ",[208,262,263],{"class":221},"return\n",[208,265,267,270,273,277],{"class":210,"line":266},4,[208,268,269],{"class":232},"  install.installed ",[208,271,272],{"class":221},"=",[208,274,276],{"class":275},"sj4cs"," true",[208,278,279],{"class":214}," \u002F\u002F 保证 Vue-router 只被 use 一次\n",[208,281,283],{"class":210,"line":282},5,[208,284,286],{"emptyLinePlaceholder":285},true,"\n",[208,288,290,293,295],{"class":210,"line":289},6,[208,291,292],{"class":232},"  _Vue ",[208,294,272],{"class":221},[208,296,297],{"class":232}," Vue\n",[208,299,301],{"class":210,"line":300},7,[208,302,286],{"emptyLinePlaceholder":285},[208,304,306,309,312,315,318,321,324,327],{"class":210,"line":305},8,[208,307,308],{"class":221},"  const",[208,310,311],{"class":228}," isDef",[208,313,314],{"class":221}," =",[208,316,317],{"class":236}," v",[208,319,320],{"class":221}," =>",[208,322,323],{"class":232}," v ",[208,325,326],{"class":221},"!==",[208,328,329],{"class":275}," undefined\n",[208,331,333],{"class":210,"line":332},9,[208,334,286],{"emptyLinePlaceholder":285},[208,336,338,340,343,345,347,350,353,356,359,362],{"class":210,"line":337},10,[208,339,308],{"class":221},[208,341,342],{"class":228}," registerInstance",[208,344,314],{"class":221},[208,346,233],{"class":232},[208,348,349],{"class":236},"vm",[208,351,352],{"class":232},", ",[208,354,355],{"class":236},"callVal",[208,357,358],{"class":232},") ",[208,360,361],{"class":221},"=>",[208,363,364],{"class":232}," {\n",[208,366,368,371,374,376],{"class":210,"line":367},11,[208,369,370],{"class":221},"    let",[208,372,373],{"class":232}," i ",[208,375,272],{"class":221},[208,377,378],{"class":232}," vm.$options._parentVnode\n",[208,380,382,385,387,390,393,395,397,400,402,405,407,409,411,413],{"class":210,"line":381},12,[208,383,384],{"class":221},"    if",[208,386,233],{"class":232},[208,388,389],{"class":228},"isDef",[208,391,392],{"class":232},"(i) ",[208,394,251],{"class":221},[208,396,311],{"class":228},[208,398,399],{"class":232},"(i ",[208,401,272],{"class":221},[208,403,404],{"class":232}," i.data) ",[208,406,251],{"class":221},[208,408,311],{"class":228},[208,410,399],{"class":232},[208,412,272],{"class":221},[208,414,415],{"class":232}," i.registerRouteInstance)) {\n",[208,417,419,422],{"class":210,"line":418},13,[208,420,421],{"class":228},"      i",[208,423,424],{"class":232},"(vm, callVal)\n",[208,426,428],{"class":210,"line":427},14,[208,429,430],{"class":232},"    }\n",[208,432,434],{"class":210,"line":433},15,[208,435,436],{"class":232},"  }\n",[208,438,440],{"class":210,"line":439},16,[208,441,286],{"emptyLinePlaceholder":285},[208,443,445,448,450],{"class":210,"line":444},17,[208,446,447],{"class":232},"  Vue.",[208,449,172],{"class":228},[208,451,452],{"class":232},"({\n",[208,454,456,459,462],{"class":210,"line":455},18,[208,457,458],{"class":228},"    beforeCreate",[208,460,461],{"class":232}," () { ",[208,463,464],{"class":214},"\u002F\u002F 注册实例\n",[208,466,468,471,473,475,478,481,484,487],{"class":210,"line":467},19,[208,469,470],{"class":221},"      if",[208,472,233],{"class":232},[208,474,389],{"class":228},[208,476,477],{"class":232},"(",[208,479,480],{"class":275},"this",[208,482,483],{"class":232},".$options.router)) { ",[208,485,486],{"class":214},"\u002F\u002F this.$options.router 来自于 VueRouter 的实例化",[208,488,489],{"class":214}," \u002F\u002F 判断实例是否已经挂载\n",[208,491,493,496,499,501],{"class":210,"line":492},20,[208,494,495],{"class":275},"        this",[208,497,498],{"class":232},"._routerRoot ",[208,500,272],{"class":221},[208,502,503],{"class":275}," this\n",[208,505,507,509,512,514,517],{"class":210,"line":506},21,[208,508,495],{"class":275},[208,510,511],{"class":232},"._router ",[208,513,272],{"class":221},[208,515,516],{"class":275}," this",[208,518,519],{"class":232},".$options.router\n",[208,521,523,525,528,531,533,535,537,540,543],{"class":210,"line":522},22,[208,524,495],{"class":275},[208,526,527],{"class":232},"._router.",[208,529,530],{"class":228},"init",[208,532,477],{"class":232},[208,534,480],{"class":275},[208,536,358],{"class":232},[208,538,539],{"class":214},"\u002F\u002F",[208,541,542],{"class":214}," \u002F\u002F 调用 VueRouter 的 init 方法",[208,544,545],{"class":214}," \u002F\u002F 后文会说明 init 方法的作用\n",[208,547,549,552,555,557,559,561,565,567,569],{"class":210,"line":548},23,[208,550,551],{"class":232},"        Vue.util.",[208,553,554],{"class":228},"defineReactive",[208,556,477],{"class":232},[208,558,480],{"class":275},[208,560,352],{"class":232},[208,562,564],{"class":563},"sZZnC","'_route'",[208,566,352],{"class":232},[208,568,480],{"class":275},[208,570,571],{"class":232},"._router.history.current)\n",[208,573,575,578,581],{"class":210,"line":574},24,[208,576,577],{"class":232},"      } ",[208,579,580],{"class":221},"else",[208,582,364],{"class":232},[208,584,586,588,590,592,594,596,599,601,603,606,609,611],{"class":210,"line":585},25,[208,587,495],{"class":275},[208,589,498],{"class":232},[208,591,272],{"class":221},[208,593,233],{"class":232},[208,595,480],{"class":275},[208,597,598],{"class":232},".$parent ",[208,600,251],{"class":221},[208,602,516],{"class":275},[208,604,605],{"class":232},".$parent._routerRoot) ",[208,607,608],{"class":221},"||",[208,610,516],{"class":275},[208,612,613],{"class":214}," \u002F\u002F 将组件的 _routerRoot 都指向根 Vue 实例\n",[208,615,617],{"class":210,"line":616},26,[208,618,619],{"class":232},"      }\n",[208,621,623,626,628,630,632,634],{"class":210,"line":622},27,[208,624,625],{"class":228},"      registerInstance",[208,627,477],{"class":232},[208,629,480],{"class":275},[208,631,352],{"class":232},[208,633,480],{"class":275},[208,635,636],{"class":232},")\n",[208,638,640],{"class":210,"line":639},28,[208,641,642],{"class":232},"    },\n",[208,644,646,649,651],{"class":210,"line":645},29,[208,647,648],{"class":228},"    destroyed",[208,650,461],{"class":232},[208,652,653],{"class":214},"\u002F\u002F 销毁实例 即挂载undefined\n",[208,655,657,659,661,663],{"class":210,"line":656},30,[208,658,625],{"class":228},[208,660,477],{"class":232},[208,662,480],{"class":275},[208,664,636],{"class":232},[208,666,668],{"class":210,"line":667},31,[208,669,430],{"class":232},[208,671,673],{"class":210,"line":672},32,[208,674,675],{"class":232},"  })\n",[208,677,679],{"class":210,"line":678},33,[208,680,286],{"emptyLinePlaceholder":285},[208,682,684,687,690,692,694,697,700,702,705],{"class":210,"line":683},34,[208,685,686],{"class":232},"  Object.",[208,688,689],{"class":228},"defineProperty",[208,691,477],{"class":232},[208,693,23],{"class":275},[208,695,696],{"class":232},".",[208,698,699],{"class":275},"prototype",[208,701,352],{"class":232},[208,703,704],{"class":563},"'$router'",[208,706,707],{"class":232},", {\n",[208,709,711,714,716,719,721],{"class":210,"line":710},35,[208,712,713],{"class":228},"    get",[208,715,461],{"class":232},[208,717,718],{"class":221},"return",[208,720,516],{"class":275},[208,722,723],{"class":232},"._routerRoot._router }\n",[208,725,727],{"class":210,"line":726},36,[208,728,675],{"class":232},[208,730,732],{"class":210,"line":731},37,[208,733,286],{"emptyLinePlaceholder":285},[208,735,737,739,741,743,745,747,749,751,754],{"class":210,"line":736},38,[208,738,686],{"class":232},[208,740,689],{"class":228},[208,742,477],{"class":232},[208,744,23],{"class":275},[208,746,696],{"class":232},[208,748,699],{"class":275},[208,750,352],{"class":232},[208,752,753],{"class":563},"'$route'",[208,755,707],{"class":232},[208,757,759,761,763,765,767],{"class":210,"line":758},39,[208,760,713],{"class":228},[208,762,461],{"class":232},[208,764,718],{"class":221},[208,766,516],{"class":275},[208,768,769],{"class":232},"._routerRoot._route }\n",[208,771,773],{"class":210,"line":772},40,[208,774,675],{"class":232},[208,776,778],{"class":210,"line":777},41,[208,779,286],{"emptyLinePlaceholder":285},[208,781,783,785,788,790,793,796],{"class":210,"line":782},42,[208,784,447],{"class":232},[208,786,787],{"class":228},"component",[208,789,477],{"class":232},[208,791,792],{"class":563},"'RouterView'",[208,794,795],{"class":232},", View) ",[208,797,798],{"class":214},"\u002F\u002F 注册全局组件 \u003Crouter-view>\n",[208,800,802,804,806,808,811,814],{"class":210,"line":801},43,[208,803,447],{"class":232},[208,805,787],{"class":228},[208,807,477],{"class":232},[208,809,810],{"class":563},"'RouterLink'",[208,812,813],{"class":232},", Link) ",[208,815,816],{"class":214},"\u002F\u002F 注册全局组件 \u003Crouter-link>\n",[208,818,820],{"class":210,"line":819},44,[208,821,286],{"emptyLinePlaceholder":285},[208,823,825,827,830,832],{"class":210,"line":824},45,[208,826,308],{"class":221},[208,828,829],{"class":275}," strats",[208,831,314],{"class":221},[208,833,834],{"class":232}," Vue.config.optionMergeStrategies\n",[208,836,838],{"class":210,"line":837},46,[208,839,840],{"class":214},"  \u002F\u002F use the same hook merging strategy for route hooks\n",[208,842,844,847,849,852,854,857,859],{"class":210,"line":843},47,[208,845,846],{"class":232},"  strats.beforeRouteEnter ",[208,848,272],{"class":221},[208,850,851],{"class":232}," strats.beforeRouteLeave ",[208,853,272],{"class":221},[208,855,856],{"class":232}," strats.beforeRouteUpdate ",[208,858,272],{"class":221},[208,860,861],{"class":232}," strats.created\n",[208,863,865],{"class":210,"line":864},48,[208,866,867],{"class":232},"}\n",[14,869,870,871,873,874,876,877,879,880,882,883,885,886,888,889,891,892,894,895,898],{},"之后是",[17,872,154],{},"对象的构造函数，主要是先获取",[17,875,40],{},"的值，如果",[17,878,40],{},"的值为",[17,881,44],{},"但是浏览器不支持",[17,884,44],{},"模式,那么就强制设置",[17,887,40],{},"值为",[17,890,33],{},"，接下来根据",[17,893,40],{},"的值，来选择",[17,896,897],{},"vue-router","使用哪种模式。",[108,900,902],{"className":202,"code":901,"language":204,"meta":116,"style":116},"\u002F\u002F dev\u002Fsrc\u002Findex.js line 40\nconstructor (options: RouterOptions = {}) {\n  this.app = null\n  this.apps = []\n  this.options = options\n  this.beforeHooks = []\n  this.resolveHooks = []\n  this.afterHooks = []\n  this.matcher = createMatcher(options.routes || [], this) \u002F\u002F 创建路由匹配对象\n\n  let mode = options.mode || 'hash'\n  this.fallback =\n    mode === 'history' && !supportsPushState && options.fallback !== false \u002F\u002F 检车兼容\n  if (this.fallback) {\n    mode = 'hash'\n  }\n  if (!inBrowser) {\n    mode = 'abstract'\n  }\n  this.mode = mode\n\n  switch (mode) {\n    case 'history':\n      this.history = new HTML5History(this, options.base) \u002F\u002F 实例化history模式\n      break\n    case 'hash':\n      this.history = new HashHistory(this, options.base, this.fallback) \u002F\u002F 实例化Hash模式\n      break\n    case 'abstract':\n      this.history = new AbstractHistory(this, options.base)\n      break\n    default:\n      if (process.env.NODE_ENV !== 'production') {\n        assert(false, `invalid mode: ${mode}`)\n      }\n  }\n}\n",[17,903,904,909,922,935,947,959,970,981,992,1019,1023,1041,1051,1083,1094,1102,1106,1118,1127,1131,1143,1147,1155,1165,1191,1196,1205,1233,1237,1246,1266,1270,1277,1295,1317,1321,1325],{"__ignoreMap":116},[208,905,906],{"class":210,"line":211},[208,907,908],{"class":214},"\u002F\u002F dev\u002Fsrc\u002Findex.js line 40\n",[208,910,911,914,917,919],{"class":210,"line":218},[208,912,913],{"class":228},"constructor",[208,915,916],{"class":232}," (options: RouterOptions ",[208,918,272],{"class":221},[208,920,921],{"class":232}," {}) {\n",[208,923,924,927,930,932],{"class":210,"line":242},[208,925,926],{"class":275},"  this",[208,928,929],{"class":232},".app ",[208,931,272],{"class":221},[208,933,934],{"class":275}," null\n",[208,936,937,939,942,944],{"class":210,"line":266},[208,938,926],{"class":275},[208,940,941],{"class":232},".apps ",[208,943,272],{"class":221},[208,945,946],{"class":232}," []\n",[208,948,949,951,954,956],{"class":210,"line":282},[208,950,926],{"class":275},[208,952,953],{"class":232},".options ",[208,955,272],{"class":221},[208,957,958],{"class":232}," options\n",[208,960,961,963,966,968],{"class":210,"line":289},[208,962,926],{"class":275},[208,964,965],{"class":232},".beforeHooks ",[208,967,272],{"class":221},[208,969,946],{"class":232},[208,971,972,974,977,979],{"class":210,"line":300},[208,973,926],{"class":275},[208,975,976],{"class":232},".resolveHooks ",[208,978,272],{"class":221},[208,980,946],{"class":232},[208,982,983,985,988,990],{"class":210,"line":305},[208,984,926],{"class":275},[208,986,987],{"class":232},".afterHooks ",[208,989,272],{"class":221},[208,991,946],{"class":232},[208,993,994,996,999,1001,1004,1007,1009,1012,1014,1016],{"class":210,"line":332},[208,995,926],{"class":275},[208,997,998],{"class":232},".matcher ",[208,1000,272],{"class":221},[208,1002,1003],{"class":228}," createMatcher",[208,1005,1006],{"class":232},"(options.routes ",[208,1008,608],{"class":221},[208,1010,1011],{"class":232}," [], ",[208,1013,480],{"class":275},[208,1015,358],{"class":232},[208,1017,1018],{"class":214},"\u002F\u002F 创建路由匹配对象\n",[208,1020,1021],{"class":210,"line":337},[208,1022,286],{"emptyLinePlaceholder":285},[208,1024,1025,1028,1031,1033,1036,1038],{"class":210,"line":367},[208,1026,1027],{"class":221},"  let",[208,1029,1030],{"class":232}," mode ",[208,1032,272],{"class":221},[208,1034,1035],{"class":232}," options.mode ",[208,1037,608],{"class":221},[208,1039,1040],{"class":563}," 'hash'\n",[208,1042,1043,1045,1048],{"class":210,"line":381},[208,1044,926],{"class":275},[208,1046,1047],{"class":232},".fallback ",[208,1049,1050],{"class":221},"=\n",[208,1052,1053,1056,1058,1061,1064,1067,1070,1072,1075,1077,1080],{"class":210,"line":418},[208,1054,1055],{"class":232},"    mode ",[208,1057,257],{"class":221},[208,1059,1060],{"class":563}," 'history'",[208,1062,1063],{"class":221}," &&",[208,1065,1066],{"class":221}," !",[208,1068,1069],{"class":232},"supportsPushState ",[208,1071,251],{"class":221},[208,1073,1074],{"class":232}," options.fallback ",[208,1076,326],{"class":221},[208,1078,1079],{"class":275}," false",[208,1081,1082],{"class":214}," \u002F\u002F 检车兼容\n",[208,1084,1085,1087,1089,1091],{"class":210,"line":427},[208,1086,245],{"class":221},[208,1088,233],{"class":232},[208,1090,480],{"class":275},[208,1092,1093],{"class":232},".fallback) {\n",[208,1095,1096,1098,1100],{"class":210,"line":433},[208,1097,1055],{"class":232},[208,1099,272],{"class":221},[208,1101,1040],{"class":563},[208,1103,1104],{"class":210,"line":439},[208,1105,436],{"class":232},[208,1107,1108,1110,1112,1115],{"class":210,"line":444},[208,1109,245],{"class":221},[208,1111,233],{"class":232},[208,1113,1114],{"class":221},"!",[208,1116,1117],{"class":232},"inBrowser) {\n",[208,1119,1120,1122,1124],{"class":210,"line":455},[208,1121,1055],{"class":232},[208,1123,272],{"class":221},[208,1125,1126],{"class":563}," 'abstract'\n",[208,1128,1129],{"class":210,"line":467},[208,1130,436],{"class":232},[208,1132,1133,1135,1138,1140],{"class":210,"line":492},[208,1134,926],{"class":275},[208,1136,1137],{"class":232},".mode ",[208,1139,272],{"class":221},[208,1141,1142],{"class":232}," mode\n",[208,1144,1145],{"class":210,"line":506},[208,1146,286],{"emptyLinePlaceholder":285},[208,1148,1149,1152],{"class":210,"line":522},[208,1150,1151],{"class":221},"  switch",[208,1153,1154],{"class":232}," (mode) {\n",[208,1156,1157,1160,1162],{"class":210,"line":548},[208,1158,1159],{"class":221},"    case",[208,1161,1060],{"class":563},[208,1163,1164],{"class":232},":\n",[208,1166,1167,1170,1173,1175,1178,1181,1183,1185,1188],{"class":210,"line":574},[208,1168,1169],{"class":275},"      this",[208,1171,1172],{"class":232},".history ",[208,1174,272],{"class":221},[208,1176,1177],{"class":221}," new",[208,1179,1180],{"class":228}," HTML5History",[208,1182,477],{"class":232},[208,1184,480],{"class":275},[208,1186,1187],{"class":232},", options.base) ",[208,1189,1190],{"class":214},"\u002F\u002F 实例化history模式\n",[208,1192,1193],{"class":210,"line":585},[208,1194,1195],{"class":221},"      break\n",[208,1197,1198,1200,1203],{"class":210,"line":616},[208,1199,1159],{"class":221},[208,1201,1202],{"class":563}," 'hash'",[208,1204,1164],{"class":232},[208,1206,1207,1209,1211,1213,1215,1218,1220,1222,1225,1227,1230],{"class":210,"line":622},[208,1208,1169],{"class":275},[208,1210,1172],{"class":232},[208,1212,272],{"class":221},[208,1214,1177],{"class":221},[208,1216,1217],{"class":228}," HashHistory",[208,1219,477],{"class":232},[208,1221,480],{"class":275},[208,1223,1224],{"class":232},", options.base, ",[208,1226,480],{"class":275},[208,1228,1229],{"class":232},".fallback) ",[208,1231,1232],{"class":214},"\u002F\u002F 实例化Hash模式\n",[208,1234,1235],{"class":210,"line":639},[208,1236,1195],{"class":221},[208,1238,1239,1241,1244],{"class":210,"line":645},[208,1240,1159],{"class":221},[208,1242,1243],{"class":563}," 'abstract'",[208,1245,1164],{"class":232},[208,1247,1248,1250,1252,1254,1256,1259,1261,1263],{"class":210,"line":656},[208,1249,1169],{"class":275},[208,1251,1172],{"class":232},[208,1253,272],{"class":221},[208,1255,1177],{"class":221},[208,1257,1258],{"class":228}," AbstractHistory",[208,1260,477],{"class":232},[208,1262,480],{"class":275},[208,1264,1265],{"class":232},", options.base)\n",[208,1267,1268],{"class":210,"line":667},[208,1269,1195],{"class":221},[208,1271,1272,1275],{"class":210,"line":672},[208,1273,1274],{"class":221},"    default",[208,1276,1164],{"class":232},[208,1278,1279,1281,1284,1287,1290,1293],{"class":210,"line":678},[208,1280,470],{"class":221},[208,1282,1283],{"class":232}," (process.env.",[208,1285,1286],{"class":275},"NODE_ENV",[208,1288,1289],{"class":221}," !==",[208,1291,1292],{"class":563}," 'production'",[208,1294,239],{"class":232},[208,1296,1297,1300,1302,1305,1307,1310,1312,1315],{"class":210,"line":683},[208,1298,1299],{"class":228},"        assert",[208,1301,477],{"class":232},[208,1303,1304],{"class":275},"false",[208,1306,352],{"class":232},[208,1308,1309],{"class":563},"`invalid mode: ${",[208,1311,40],{"class":232},[208,1313,1314],{"class":563},"}`",[208,1316,636],{"class":232},[208,1318,1319],{"class":210,"line":710},[208,1320,619],{"class":232},[208,1322,1323],{"class":210,"line":726},[208,1324,436],{"class":232},[208,1326,1327],{"class":210,"line":731},[208,1328,867],{"class":232},[14,1330,1331,1332,1335,1336,1338,1339,1342,1343,1345,1346,1349,1350,1353,1354,1357],{},"在构造函数中调用了创建路由匹配对象的方法",[17,1333,1334],{},"createMatcher","，而在",[17,1337,1334],{},"中又调用了实际用以创建路由映射表的方法",[17,1340,1341],{},"createRouteMap","，可以说",[17,1344,1334],{},"函数的作用就是创建路由映射表，然后通过闭包的方式让",[17,1347,1348],{},"addRoutes","和",[17,1351,1352],{},"match","函数能够使用路由映射表的几个对象，最后返回一个",[17,1355,1356],{},"Matcher","对象。",[108,1359,1361],{"className":202,"code":1360,"language":204,"meta":116,"style":116},"\u002F\u002F dev\u002Fsrc\u002Fcreate-matcher.js line 16\nexport function createMatcher (\n  routes: Array\u003CRouteConfig>,\n  router: VueRouter\n): Matcher {\n  const { pathList, pathMap, nameMap } = createRouteMap(routes) \u002F\u002F 创建路由映射表\n\n  function addRoutes (routes) {\n    createRouteMap(routes, pathList, pathMap, nameMap)\n  }\n\n  function match ( \u002F\u002F 路由匹配\n    raw: RawLocation,\n    currentRoute?: Route,\n    redirectedFrom?: Location\n  ): Route {\n    const location = normalizeLocation(raw, currentRoute, false, router) \u002F\u002F location 是一个对象，类似于 {\"_normalized\":true,\"path\":\"\u002F\",\"query\":{},\"hash\":\"\"}\n    const { name } = location\n\n    if (name) { \u002F\u002F 如果有路由名称 就进行nameMap映射\n      const record = nameMap[name]  \u002F\u002F nameMap[name] = 路由记录\n      if (process.env.NODE_ENV !== 'production') {\n        warn(record, `Route with name '${name}' does not exist`)\n      }\n      if (!record) return _createRoute(null, location)\n      const paramNames = record.regex.keys\n        .filter(key => !key.optional)\n        .map(key => key.name)\n\n      if (typeof location.params !== 'object') {\n        location.params = {}\n      }\n\n      if (currentRoute && typeof currentRoute.params === 'object') {\n        for (const key in currentRoute.params) {\n          if (!(key in location.params) && paramNames.indexOf(key) > -1) {\n            location.params[key] = currentRoute.params[key]\n          }\n        }\n      }\n\n      location.path = fillParams(record.path, location.params, `named route \"${name}\"`)\n      return _createRoute(record, location, redirectedFrom)\n    } else if (location.path) { \u002F\u002F 如果路由配置了path，到pathList和PathMap里匹配到路由记录 \n      location.params = {}\n      for (let i = 0; i \u003C pathList.length; i++) {\n        const path = pathList[i]\n        const record = pathMap[path]\n        if (matchRoute(record.regex, location.path, location.params)) {\n          return _createRoute(record, location, redirectedFrom)\n        }\n      }\n    }\n    \u002F\u002F no match\n    return _createRoute(null, location)\n  }\n\n  function redirect ( \u002F\u002F 处理重定向\n    record: RouteRecord,\n    location: Location\n  ): Route {\n    const originalRedirect = record.redirect\n    let redirect = typeof originalRedirect === 'function'\n      ? originalRedirect(createRoute(record, location, null, router))\n      : originalRedirect\n\n    if (typeof redirect === 'string') {\n      redirect = { path: redirect }\n    }\n\n    if (!redirect || typeof redirect !== 'object') {\n      if (process.env.NODE_ENV !== 'production') {\n        warn(\n          false, `invalid redirect option: ${JSON.stringify(redirect)}`\n        )\n      }\n      return _createRoute(null, location)\n    }\n\n    const re: Object = redirect\n    const { name, path } = re\n    let { query, hash, params } = location\n    query = re.hasOwnProperty('query') ? re.query : query\n    hash = re.hasOwnProperty('hash') ? re.hash : hash\n    params = re.hasOwnProperty('params') ? re.params : params\n\n    if (name) {\n      \u002F\u002F resolved named direct\n      const targetRecord = nameMap[name]\n      if (process.env.NODE_ENV !== 'production') {\n        assert(targetRecord, `redirect failed: named route \"${name}\" not found.`)\n      }\n      return match({\n        _normalized: true,\n        name,\n        query,\n        hash,\n        params\n      }, undefined, location)\n    } else if (path) {\n      \u002F\u002F 1. resolve relative redirect\n      const rawPath = resolveRecordPath(path, record)\n      \u002F\u002F 2. resolve params\n      const resolvedPath = fillParams(rawPath, params, `redirect route with path \"${rawPath}\"`)\n      \u002F\u002F 3. rematch with existing query and hash\n      return match({\n        _normalized: true,\n        path: resolvedPath,\n        query,\n        hash\n      }, undefined, location)\n    } else {\n      if (process.env.NODE_ENV !== 'production') {\n        warn(false, `invalid redirect option: ${JSON.stringify(redirect)}`)\n      }\n      return _createRoute(null, location)\n    }\n  }\n\n  function alias ( \u002F\u002F 处理别名\n    record: RouteRecord,\n    location: Location,\n    matchAs: string\n  ): Route {\n    const aliasedPath = fillParams(matchAs, location.params, `aliased route with path \"${matchAs}\"`)\n    const aliasedMatch = match({\n      _normalized: true,\n      path: aliasedPath\n    })\n    if (aliasedMatch) {\n      const matched = aliasedMatch.matched\n      const aliasedRecord = matched[matched.length - 1]\n      location.params = aliasedMatch.params\n      return _createRoute(aliasedRecord, location)\n    }\n    return _createRoute(null, location)\n  }\n\n  function _createRoute (  \u002F\u002F 创建路由\n    record: ?RouteRecord,\n    location: Location,\n    redirectedFrom?: Location\n  ): Route {\n    if (record && record.redirect) {\n      return redirect(record, redirectedFrom || location)\n    }\n    if (record && record.matchAs) {\n      return alias(record, location, record.matchAs)\n    }\n    return createRoute(record, location, redirectedFrom, router) \u002F\u002F 创建路由对象\n  }\n\n  return {\n    match,\n    addRoutes\n  }\n}\n\n\u002F\u002F dev\u002Fsrc\u002Fcreate-route-map.js line 7\nexport function createRouteMap (\n  routes: Array\u003CRouteConfig>,\n  oldPathList?: Array\u003Cstring>,\n  oldPathMap?: Dictionary\u003CRouteRecord>,\n  oldNameMap?: Dictionary\u003CRouteRecord>\n): {\n  pathList: Array\u003Cstring>,\n  pathMap: Dictionary\u003CRouteRecord>,\n  nameMap: Dictionary\u003CRouteRecord>\n} {\n  \u002F\u002F the path list is used to control path matching priority\n  const pathList: Array\u003Cstring> = oldPathList || [] \u002F\u002F 创建映射表\n  \u002F\u002F $flow-disable-line\n  const pathMap: Dictionary\u003CRouteRecord> = oldPathMap || Object.create(null)\n  \u002F\u002F $flow-disable-line\n  const nameMap: Dictionary\u003CRouteRecord> = oldNameMap || Object.create(null)\n\n  routes.forEach(route => { \u002F\u002F 遍历路由配置，为每个配置添加路由记录\n    addRouteRecord(pathList, pathMap, nameMap, route)\n  })\n\n  \u002F\u002F ensure wildcard routes are always at the end\n  for (let i = 0, l = pathList.length; i \u003C l; i++) { \u002F\u002F 确保通配符在最后\n    if (pathList[i] === '*') {\n      pathList.push(pathList.splice(i, 1)[0])\n      l--\n      i--\n    }\n  }\n\n  if (process.env.NODE_ENV === 'development') {\n    \u002F\u002F warn if routes do not include leading slashes\n    const found = pathList\n    \u002F\u002F check for missing leading slash\n      .filter(path => path && path.charAt(0) !== '*' && path.charAt(0) !== '\u002F')\n\n    if (found.length > 0) {\n      const pathNames = found.map(path => `- ${path}`).join('\\n')\n      warn(false, `Non-nested routes must include a leading slash character. Fix the following routes: \\n${pathNames}`)\n    }\n  }\n\n  return {\n    pathList,\n    pathMap,\n    nameMap\n  }\n}\n\nfunction addRouteRecord ( \u002F\u002F 添加路由记录\n  pathList: Array\u003Cstring>,\n  pathMap: Dictionary\u003CRouteRecord>,\n  nameMap: Dictionary\u003CRouteRecord>,\n  route: RouteConfig,\n  parent?: RouteRecord,\n  matchAs?: string\n) {\n  const { path, name } = route \u002F\u002F 获得路由配置下的属性\n  if (process.env.NODE_ENV !== 'production') {\n    assert(path != null, `\"path\" is required in a route configuration.`)\n    assert(\n      typeof route.component !== 'string',\n      `route config \"component\" for path: ${String(\n        path || name\n      )} cannot be a ` + `string id. Use an actual component instead.`\n    )\n  }\n\n  const pathToRegexpOptions: PathToRegexpOptions =\n    route.pathToRegexpOptions || {}\n  const normalizedPath = normalizePath(path, parent, pathToRegexpOptions.strict)\n\n  if (typeof route.caseSensitive === 'boolean') {\n    pathToRegexpOptions.sensitive = route.caseSensitive\n  }\n\n  const record: RouteRecord = { \u002F\u002F 生成记录对象\n    path: normalizedPath,\n    regex: compileRouteRegex(normalizedPath, pathToRegexpOptions),\n    components: route.components || { default: route.component },\n    instances: {},\n    name,\n    parent,\n    matchAs,\n    redirect: route.redirect,\n    beforeEnter: route.beforeEnter,\n    meta: route.meta || {},\n    props:\n      route.props == null\n        ? {}\n        : route.components\n          ? route.props\n          : { default: route.props }\n  }\n\n  if (route.children) { \n    \u002F\u002F Warn if route is named, does not redirect and has a default child route.\n    \u002F\u002F If users navigate to this route by name, the default child will\n    \u002F\u002F not be rendered (GH Issue #629)\n    if (process.env.NODE_ENV !== 'production') {\n      if (\n        route.name &&\n        !route.redirect &&\n        route.children.some(child => \u002F^\\\u002F?$\u002F.test(child.path))\n      ) {\n        warn(\n          false,\n          `Named Route '${route.name}' has a default child route. ` +\n            `When navigating to this named route (:to=\"{name: '${\n              route.name\n            }'\"), ` +\n            `the default child route will not be rendered. Remove the name from ` +\n            `this route and use the name of the default child route for named ` +\n            `links instead.`\n        )\n      }\n    }\n    route.children.forEach(child => { \u002F\u002F 递归路由配置的 children 属性，添加路由记录\n      const childMatchAs = matchAs\n        ? cleanPath(`${matchAs}\u002F${child.path}`)\n        : undefined\n      addRouteRecord(pathList, pathMap, nameMap, child, record, childMatchAs)\n    })\n  }\n\n  if (!pathMap[record.path]) { \u002F\u002F 如果有多个相同的路径，只有第一个起作用，后面的会被忽略\n    pathList.push(record.path)\n    pathMap[record.path] = record\n  }\n\n  if (route.alias !== undefined) { \u002F\u002F 如果路由有别名的话，给别名也添加路由记录\n    const aliases = Array.isArray(route.alias) ? route.alias : [route.alias]\n    for (let i = 0; i \u003C aliases.length; ++i) {\n      const alias = aliases[i]\n      if (process.env.NODE_ENV !== 'production' && alias === path) {\n        warn(\n          false,\n          `Found an alias with the same value as the path: \"${path}\". You have to remove that alias. It will be ignored in development.`\n        )\n        \u002F\u002F skip in dev to make it work\n        continue\n      }\n\n      const aliasRoute = {\n        path: alias,\n        children: route.children\n      }\n      addRouteRecord(\n        pathList,\n        pathMap,\n        nameMap,\n        aliasRoute,\n        parent,\n        record.path || '\u002F' \u002F\u002F matchAs\n      )\n    }\n  }\n\n  if (name) {\n    if (!nameMap[name]) {\n      nameMap[name] = record\n    } else if (process.env.NODE_ENV !== 'production' && !matchAs) {\n      warn(\n        false,\n        `Duplicate named routes definition: ` +\n          `{ name: \"${name}\", path: \"${record.path}\" }`\n      )\n    }\n  }\n}\n",[17,1362,1363,1368,1379,1399,1409,1421,1455,1459,1474,1482,1486,1490,1503,1516,1529,1539,1550,1574,1590,1594,1604,1620,1634,1652,1656,1680,1692,1712,1728,1732,1751,1761,1765,1769,1790,1809,1849,1859,1864,1869,1873,1877,1900,1910,1926,1935,1971,1984,1995,2009,2019,2024,2029,2034,2040,2054,2059,2064,2077,2090,2100,2111,2124,2144,2165,2174,2179,2197,2208,2213,2218,2242,2257,2265,2294,2300,2305,2318,2323,2328,2346,2367,2379,2411,2440,2469,2474,2482,2488,2501,2516,2534,2539,2548,2559,2565,2571,2577,2583,2594,2606,2612,2628,2634,2659,2665,2674,2683,2689,2694,2700,2709,2718,2733,2762,2767,2780,2785,2790,2795,2808,2819,2831,2842,2853,2878,2892,2902,2908,2914,2922,2935,2958,2968,2978,2983,2996,3001,3006,3019,3034,3045,3054,3065,3078,3093,3098,3110,3120,3125,3139,3144,3149,3157,3163,3169,3174,3179,3184,3190,3201,3216,3233,3250,3267,3276,3292,3308,3324,3330,3336,3368,3374,3411,3416,3451,3456,3477,3486,3491,3496,3502,3542,3557,3586,3595,3602,3607,3612,3617,3634,3640,3653,3659,3713,3718,3735,3781,3808,3813,3818,3823,3830,3836,3842,3848,3853,3858,3863,3877,3892,3907,3922,3935,3947,3957,3962,3985,4000,4022,4029,4044,4055,4067,4082,4088,4093,4098,4114,4124,4140,4145,4164,4175,4180,4185,4203,4209,4221,4232,4238,4244,4250,4256,4262,4268,4279,4285,4296,4304,4313,4322,4331,4336,4341,4349,4355,4361,4367,4382,4389,4398,4409,4449,4455,4462,4469,4487,4493,4504,4512,4520,4528,4534,4539,4544,4549,4568,4581,4609,4616,4625,4630,4635,4640,4655,4666,4677,4682,4687,4705,4734,4767,4779,4802,4809,4816,4827,4832,4838,4844,4849,4854,4866,4872,4878,4883,4890,4896,4902,4908,4914,4920,4933,4939,4944,4949,4954,4961,4973,4983,5007,5014,5022,5030,5051,5056,5061,5066],{"__ignoreMap":116},[208,1364,1365],{"class":210,"line":211},[208,1366,1367],{"class":214},"\u002F\u002F dev\u002Fsrc\u002Fcreate-matcher.js line 16\n",[208,1369,1370,1372,1374,1376],{"class":210,"line":218},[208,1371,222],{"class":221},[208,1373,225],{"class":221},[208,1375,1003],{"class":228},[208,1377,1378],{"class":232}," (\n",[208,1380,1381,1384,1387,1390,1393,1396],{"class":210,"line":242},[208,1382,1383],{"class":236},"  routes",[208,1385,1386],{"class":221},":",[208,1388,1389],{"class":228}," Array",[208,1391,1392],{"class":232},"\u003C",[208,1394,1395],{"class":228},"RouteConfig",[208,1397,1398],{"class":232},">,\n",[208,1400,1401,1404,1406],{"class":210,"line":266},[208,1402,1403],{"class":236},"  router",[208,1405,1386],{"class":221},[208,1407,1408],{"class":228}," VueRouter\n",[208,1410,1411,1414,1416,1419],{"class":210,"line":282},[208,1412,1413],{"class":232},")",[208,1415,1386],{"class":221},[208,1417,1418],{"class":228}," Matcher",[208,1420,364],{"class":232},[208,1422,1423,1425,1428,1431,1433,1436,1438,1441,1444,1446,1449,1452],{"class":210,"line":289},[208,1424,308],{"class":221},[208,1426,1427],{"class":232}," { ",[208,1429,1430],{"class":275},"pathList",[208,1432,352],{"class":232},[208,1434,1435],{"class":275},"pathMap",[208,1437,352],{"class":232},[208,1439,1440],{"class":275},"nameMap",[208,1442,1443],{"class":232}," } ",[208,1445,272],{"class":221},[208,1447,1448],{"class":228}," createRouteMap",[208,1450,1451],{"class":232},"(routes) ",[208,1453,1454],{"class":214},"\u002F\u002F 创建路由映射表\n",[208,1456,1457],{"class":210,"line":300},[208,1458,286],{"emptyLinePlaceholder":285},[208,1460,1461,1464,1467,1469,1472],{"class":210,"line":305},[208,1462,1463],{"class":221},"  function",[208,1465,1466],{"class":228}," addRoutes",[208,1468,233],{"class":232},[208,1470,1471],{"class":236},"routes",[208,1473,239],{"class":232},[208,1475,1476,1479],{"class":210,"line":332},[208,1477,1478],{"class":228},"    createRouteMap",[208,1480,1481],{"class":232},"(routes, pathList, pathMap, nameMap)\n",[208,1483,1484],{"class":210,"line":337},[208,1485,436],{"class":232},[208,1487,1488],{"class":210,"line":367},[208,1489,286],{"emptyLinePlaceholder":285},[208,1491,1492,1494,1497,1500],{"class":210,"line":381},[208,1493,1463],{"class":221},[208,1495,1496],{"class":228}," match",[208,1498,1499],{"class":232}," ( ",[208,1501,1502],{"class":214},"\u002F\u002F 路由匹配\n",[208,1504,1505,1508,1510,1513],{"class":210,"line":418},[208,1506,1507],{"class":236},"    raw",[208,1509,1386],{"class":221},[208,1511,1512],{"class":228}," RawLocation",[208,1514,1515],{"class":232},",\n",[208,1517,1518,1521,1524,1527],{"class":210,"line":427},[208,1519,1520],{"class":236},"    currentRoute",[208,1522,1523],{"class":221},"?:",[208,1525,1526],{"class":228}," Route",[208,1528,1515],{"class":232},[208,1530,1531,1534,1536],{"class":210,"line":433},[208,1532,1533],{"class":236},"    redirectedFrom",[208,1535,1523],{"class":221},[208,1537,1538],{"class":228}," Location\n",[208,1540,1541,1544,1546,1548],{"class":210,"line":439},[208,1542,1543],{"class":232},"  )",[208,1545,1386],{"class":221},[208,1547,1526],{"class":228},[208,1549,364],{"class":232},[208,1551,1552,1555,1558,1560,1563,1566,1568,1571],{"class":210,"line":444},[208,1553,1554],{"class":221},"    const",[208,1556,1557],{"class":275}," location",[208,1559,314],{"class":221},[208,1561,1562],{"class":228}," normalizeLocation",[208,1564,1565],{"class":232},"(raw, currentRoute, ",[208,1567,1304],{"class":275},[208,1569,1570],{"class":232},", router) ",[208,1572,1573],{"class":214},"\u002F\u002F location 是一个对象，类似于 {\"_normalized\":true,\"path\":\"\u002F\",\"query\":{},\"hash\":\"\"}\n",[208,1575,1576,1578,1580,1583,1585,1587],{"class":210,"line":455},[208,1577,1554],{"class":221},[208,1579,1427],{"class":232},[208,1581,1582],{"class":275},"name",[208,1584,1443],{"class":232},[208,1586,272],{"class":221},[208,1588,1589],{"class":232}," location\n",[208,1591,1592],{"class":210,"line":467},[208,1593,286],{"emptyLinePlaceholder":285},[208,1595,1596,1598,1601],{"class":210,"line":492},[208,1597,384],{"class":221},[208,1599,1600],{"class":232}," (name) { ",[208,1602,1603],{"class":214},"\u002F\u002F 如果有路由名称 就进行nameMap映射\n",[208,1605,1606,1609,1612,1614,1617],{"class":210,"line":506},[208,1607,1608],{"class":221},"      const",[208,1610,1611],{"class":275}," record",[208,1613,314],{"class":221},[208,1615,1616],{"class":232}," nameMap[name]  ",[208,1618,1619],{"class":214},"\u002F\u002F nameMap[name] = 路由记录\n",[208,1621,1622,1624,1626,1628,1630,1632],{"class":210,"line":522},[208,1623,470],{"class":221},[208,1625,1283],{"class":232},[208,1627,1286],{"class":275},[208,1629,1289],{"class":221},[208,1631,1292],{"class":563},[208,1633,239],{"class":232},[208,1635,1636,1639,1642,1645,1647,1650],{"class":210,"line":548},[208,1637,1638],{"class":228},"        warn",[208,1640,1641],{"class":232},"(record, ",[208,1643,1644],{"class":563},"`Route with name '${",[208,1646,1582],{"class":232},[208,1648,1649],{"class":563},"}' does not exist`",[208,1651,636],{"class":232},[208,1653,1654],{"class":210,"line":574},[208,1655,619],{"class":232},[208,1657,1658,1660,1662,1664,1667,1669,1672,1674,1677],{"class":210,"line":585},[208,1659,470],{"class":221},[208,1661,233],{"class":232},[208,1663,1114],{"class":221},[208,1665,1666],{"class":232},"record) ",[208,1668,718],{"class":221},[208,1670,1671],{"class":228}," _createRoute",[208,1673,477],{"class":232},[208,1675,1676],{"class":275},"null",[208,1678,1679],{"class":232},", location)\n",[208,1681,1682,1684,1687,1689],{"class":210,"line":616},[208,1683,1608],{"class":221},[208,1685,1686],{"class":275}," paramNames",[208,1688,314],{"class":221},[208,1690,1691],{"class":232}," record.regex.keys\n",[208,1693,1694,1697,1700,1702,1705,1707,1709],{"class":210,"line":622},[208,1695,1696],{"class":232},"        .",[208,1698,1699],{"class":228},"filter",[208,1701,477],{"class":232},[208,1703,1704],{"class":236},"key",[208,1706,320],{"class":221},[208,1708,1066],{"class":221},[208,1710,1711],{"class":232},"key.optional)\n",[208,1713,1714,1716,1719,1721,1723,1725],{"class":210,"line":639},[208,1715,1696],{"class":232},[208,1717,1718],{"class":228},"map",[208,1720,477],{"class":232},[208,1722,1704],{"class":236},[208,1724,320],{"class":221},[208,1726,1727],{"class":232}," key.name)\n",[208,1729,1730],{"class":210,"line":645},[208,1731,286],{"emptyLinePlaceholder":285},[208,1733,1734,1736,1738,1741,1744,1746,1749],{"class":210,"line":656},[208,1735,470],{"class":221},[208,1737,233],{"class":232},[208,1739,1740],{"class":221},"typeof",[208,1742,1743],{"class":232}," location.params ",[208,1745,326],{"class":221},[208,1747,1748],{"class":563}," 'object'",[208,1750,239],{"class":232},[208,1752,1753,1756,1758],{"class":210,"line":667},[208,1754,1755],{"class":232},"        location.params ",[208,1757,272],{"class":221},[208,1759,1760],{"class":232}," {}\n",[208,1762,1763],{"class":210,"line":672},[208,1764,619],{"class":232},[208,1766,1767],{"class":210,"line":678},[208,1768,286],{"emptyLinePlaceholder":285},[208,1770,1771,1773,1776,1778,1781,1784,1786,1788],{"class":210,"line":683},[208,1772,470],{"class":221},[208,1774,1775],{"class":232}," (currentRoute ",[208,1777,251],{"class":221},[208,1779,1780],{"class":221}," typeof",[208,1782,1783],{"class":232}," currentRoute.params ",[208,1785,257],{"class":221},[208,1787,1748],{"class":563},[208,1789,239],{"class":232},[208,1791,1792,1795,1797,1800,1803,1806],{"class":210,"line":710},[208,1793,1794],{"class":221},"        for",[208,1796,233],{"class":232},[208,1798,1799],{"class":221},"const",[208,1801,1802],{"class":275}," key",[208,1804,1805],{"class":221}," in",[208,1807,1808],{"class":232}," currentRoute.params) {\n",[208,1810,1811,1814,1816,1818,1821,1824,1827,1829,1832,1835,1838,1841,1844,1847],{"class":210,"line":726},[208,1812,1813],{"class":221},"          if",[208,1815,233],{"class":232},[208,1817,1114],{"class":221},[208,1819,1820],{"class":232},"(key ",[208,1822,1823],{"class":221},"in",[208,1825,1826],{"class":232}," location.params) ",[208,1828,251],{"class":221},[208,1830,1831],{"class":232}," paramNames.",[208,1833,1834],{"class":228},"indexOf",[208,1836,1837],{"class":232},"(key) ",[208,1839,1840],{"class":221},">",[208,1842,1843],{"class":221}," -",[208,1845,1846],{"class":275},"1",[208,1848,239],{"class":232},[208,1850,1851,1854,1856],{"class":210,"line":731},[208,1852,1853],{"class":232},"            location.params[key] ",[208,1855,272],{"class":221},[208,1857,1858],{"class":232}," currentRoute.params[key]\n",[208,1860,1861],{"class":210,"line":736},[208,1862,1863],{"class":232},"          }\n",[208,1865,1866],{"class":210,"line":758},[208,1867,1868],{"class":232},"        }\n",[208,1870,1871],{"class":210,"line":772},[208,1872,619],{"class":232},[208,1874,1875],{"class":210,"line":777},[208,1876,286],{"emptyLinePlaceholder":285},[208,1878,1879,1882,1884,1887,1890,1893,1895,1898],{"class":210,"line":782},[208,1880,1881],{"class":232},"      location.path ",[208,1883,272],{"class":221},[208,1885,1886],{"class":228}," fillParams",[208,1888,1889],{"class":232},"(record.path, location.params, ",[208,1891,1892],{"class":563},"`named route \"${",[208,1894,1582],{"class":232},[208,1896,1897],{"class":563},"}\"`",[208,1899,636],{"class":232},[208,1901,1902,1905,1907],{"class":210,"line":801},[208,1903,1904],{"class":221},"      return",[208,1906,1671],{"class":228},[208,1908,1909],{"class":232},"(record, location, redirectedFrom)\n",[208,1911,1912,1915,1917,1920,1923],{"class":210,"line":819},[208,1913,1914],{"class":232},"    } ",[208,1916,580],{"class":221},[208,1918,1919],{"class":221}," if",[208,1921,1922],{"class":232}," (location.path) { ",[208,1924,1925],{"class":214},"\u002F\u002F 如果路由配置了path，到pathList和PathMap里匹配到路由记录 \n",[208,1927,1928,1931,1933],{"class":210,"line":824},[208,1929,1930],{"class":232},"      location.params ",[208,1932,272],{"class":221},[208,1934,1760],{"class":232},[208,1936,1937,1940,1942,1945,1947,1949,1952,1955,1957,1960,1963,1966,1969],{"class":210,"line":837},[208,1938,1939],{"class":221},"      for",[208,1941,233],{"class":232},[208,1943,1944],{"class":221},"let",[208,1946,373],{"class":232},[208,1948,272],{"class":221},[208,1950,1951],{"class":275}," 0",[208,1953,1954],{"class":232},"; i ",[208,1956,1392],{"class":221},[208,1958,1959],{"class":232}," pathList.",[208,1961,1962],{"class":275},"length",[208,1964,1965],{"class":232},"; i",[208,1967,1968],{"class":221},"++",[208,1970,239],{"class":232},[208,1972,1973,1976,1979,1981],{"class":210,"line":843},[208,1974,1975],{"class":221},"        const",[208,1977,1978],{"class":275}," path",[208,1980,314],{"class":221},[208,1982,1983],{"class":232}," pathList[i]\n",[208,1985,1986,1988,1990,1992],{"class":210,"line":864},[208,1987,1975],{"class":221},[208,1989,1611],{"class":275},[208,1991,314],{"class":221},[208,1993,1994],{"class":232}," pathMap[path]\n",[208,1996,1998,2001,2003,2006],{"class":210,"line":1997},49,[208,1999,2000],{"class":221},"        if",[208,2002,233],{"class":232},[208,2004,2005],{"class":228},"matchRoute",[208,2007,2008],{"class":232},"(record.regex, location.path, location.params)) {\n",[208,2010,2012,2015,2017],{"class":210,"line":2011},50,[208,2013,2014],{"class":221},"          return",[208,2016,1671],{"class":228},[208,2018,1909],{"class":232},[208,2020,2022],{"class":210,"line":2021},51,[208,2023,1868],{"class":232},[208,2025,2027],{"class":210,"line":2026},52,[208,2028,619],{"class":232},[208,2030,2032],{"class":210,"line":2031},53,[208,2033,430],{"class":232},[208,2035,2037],{"class":210,"line":2036},54,[208,2038,2039],{"class":214},"    \u002F\u002F no match\n",[208,2041,2043,2046,2048,2050,2052],{"class":210,"line":2042},55,[208,2044,2045],{"class":221},"    return",[208,2047,1671],{"class":228},[208,2049,477],{"class":232},[208,2051,1676],{"class":275},[208,2053,1679],{"class":232},[208,2055,2057],{"class":210,"line":2056},56,[208,2058,436],{"class":232},[208,2060,2062],{"class":210,"line":2061},57,[208,2063,286],{"emptyLinePlaceholder":285},[208,2065,2067,2069,2072,2074],{"class":210,"line":2066},58,[208,2068,1463],{"class":221},[208,2070,2071],{"class":228}," redirect",[208,2073,1499],{"class":232},[208,2075,2076],{"class":214},"\u002F\u002F 处理重定向\n",[208,2078,2080,2083,2085,2088],{"class":210,"line":2079},59,[208,2081,2082],{"class":236},"    record",[208,2084,1386],{"class":221},[208,2086,2087],{"class":228}," RouteRecord",[208,2089,1515],{"class":232},[208,2091,2093,2096,2098],{"class":210,"line":2092},60,[208,2094,2095],{"class":236},"    location",[208,2097,1386],{"class":221},[208,2099,1538],{"class":228},[208,2101,2103,2105,2107,2109],{"class":210,"line":2102},61,[208,2104,1543],{"class":232},[208,2106,1386],{"class":221},[208,2108,1526],{"class":228},[208,2110,364],{"class":232},[208,2112,2114,2116,2119,2121],{"class":210,"line":2113},62,[208,2115,1554],{"class":221},[208,2117,2118],{"class":275}," originalRedirect",[208,2120,314],{"class":221},[208,2122,2123],{"class":232}," record.redirect\n",[208,2125,2127,2129,2132,2134,2136,2139,2141],{"class":210,"line":2126},63,[208,2128,370],{"class":221},[208,2130,2131],{"class":232}," redirect ",[208,2133,272],{"class":221},[208,2135,1780],{"class":221},[208,2137,2138],{"class":232}," originalRedirect ",[208,2140,257],{"class":221},[208,2142,2143],{"class":563}," 'function'\n",[208,2145,2147,2150,2152,2154,2157,2160,2162],{"class":210,"line":2146},64,[208,2148,2149],{"class":221},"      ?",[208,2151,2118],{"class":228},[208,2153,477],{"class":232},[208,2155,2156],{"class":228},"createRoute",[208,2158,2159],{"class":232},"(record, location, ",[208,2161,1676],{"class":275},[208,2163,2164],{"class":232},", router))\n",[208,2166,2168,2171],{"class":210,"line":2167},65,[208,2169,2170],{"class":221},"      :",[208,2172,2173],{"class":232}," originalRedirect\n",[208,2175,2177],{"class":210,"line":2176},66,[208,2178,286],{"emptyLinePlaceholder":285},[208,2180,2182,2184,2186,2188,2190,2192,2195],{"class":210,"line":2181},67,[208,2183,384],{"class":221},[208,2185,233],{"class":232},[208,2187,1740],{"class":221},[208,2189,2131],{"class":232},[208,2191,257],{"class":221},[208,2193,2194],{"class":563}," 'string'",[208,2196,239],{"class":232},[208,2198,2200,2203,2205],{"class":210,"line":2199},68,[208,2201,2202],{"class":232},"      redirect ",[208,2204,272],{"class":221},[208,2206,2207],{"class":232}," { path: redirect }\n",[208,2209,2211],{"class":210,"line":2210},69,[208,2212,430],{"class":232},[208,2214,2216],{"class":210,"line":2215},70,[208,2217,286],{"emptyLinePlaceholder":285},[208,2219,2221,2223,2225,2227,2230,2232,2234,2236,2238,2240],{"class":210,"line":2220},71,[208,2222,384],{"class":221},[208,2224,233],{"class":232},[208,2226,1114],{"class":221},[208,2228,2229],{"class":232},"redirect ",[208,2231,608],{"class":221},[208,2233,1780],{"class":221},[208,2235,2131],{"class":232},[208,2237,326],{"class":221},[208,2239,1748],{"class":563},[208,2241,239],{"class":232},[208,2243,2245,2247,2249,2251,2253,2255],{"class":210,"line":2244},72,[208,2246,470],{"class":221},[208,2248,1283],{"class":232},[208,2250,1286],{"class":275},[208,2252,1289],{"class":221},[208,2254,1292],{"class":563},[208,2256,239],{"class":232},[208,2258,2260,2262],{"class":210,"line":2259},73,[208,2261,1638],{"class":228},[208,2263,2264],{"class":232},"(\n",[208,2266,2268,2271,2273,2276,2279,2281,2284,2286,2289,2291],{"class":210,"line":2267},74,[208,2269,2270],{"class":275},"          false",[208,2272,352],{"class":232},[208,2274,2275],{"class":563},"`invalid redirect option: ${",[208,2277,2278],{"class":275},"JSON",[208,2280,696],{"class":563},[208,2282,2283],{"class":228},"stringify",[208,2285,477],{"class":563},[208,2287,2288],{"class":232},"redirect",[208,2290,1413],{"class":563},[208,2292,2293],{"class":563},"}`\n",[208,2295,2297],{"class":210,"line":2296},75,[208,2298,2299],{"class":232},"        )\n",[208,2301,2303],{"class":210,"line":2302},76,[208,2304,619],{"class":232},[208,2306,2308,2310,2312,2314,2316],{"class":210,"line":2307},77,[208,2309,1904],{"class":221},[208,2311,1671],{"class":228},[208,2313,477],{"class":232},[208,2315,1676],{"class":275},[208,2317,1679],{"class":232},[208,2319,2321],{"class":210,"line":2320},78,[208,2322,430],{"class":232},[208,2324,2326],{"class":210,"line":2325},79,[208,2327,286],{"emptyLinePlaceholder":285},[208,2329,2331,2333,2336,2338,2341,2343],{"class":210,"line":2330},80,[208,2332,1554],{"class":221},[208,2334,2335],{"class":275}," re",[208,2337,1386],{"class":221},[208,2339,2340],{"class":228}," Object",[208,2342,314],{"class":221},[208,2344,2345],{"class":232}," redirect\n",[208,2347,2349,2351,2353,2355,2357,2360,2362,2364],{"class":210,"line":2348},81,[208,2350,1554],{"class":221},[208,2352,1427],{"class":232},[208,2354,1582],{"class":275},[208,2356,352],{"class":232},[208,2358,2359],{"class":275},"path",[208,2361,1443],{"class":232},[208,2363,272],{"class":221},[208,2365,2366],{"class":232}," re\n",[208,2368,2370,2372,2375,2377],{"class":210,"line":2369},82,[208,2371,370],{"class":221},[208,2373,2374],{"class":232}," { query, hash, params } ",[208,2376,272],{"class":221},[208,2378,1589],{"class":232},[208,2380,2382,2385,2387,2390,2393,2395,2398,2400,2403,2406,2408],{"class":210,"line":2381},83,[208,2383,2384],{"class":232},"    query ",[208,2386,272],{"class":221},[208,2388,2389],{"class":232}," re.",[208,2391,2392],{"class":228},"hasOwnProperty",[208,2394,477],{"class":232},[208,2396,2397],{"class":563},"'query'",[208,2399,358],{"class":232},[208,2401,2402],{"class":221},"?",[208,2404,2405],{"class":232}," re.query ",[208,2407,1386],{"class":221},[208,2409,2410],{"class":232}," query\n",[208,2412,2414,2417,2419,2421,2423,2425,2428,2430,2432,2435,2437],{"class":210,"line":2413},84,[208,2415,2416],{"class":232},"    hash ",[208,2418,272],{"class":221},[208,2420,2389],{"class":232},[208,2422,2392],{"class":228},[208,2424,477],{"class":232},[208,2426,2427],{"class":563},"'hash'",[208,2429,358],{"class":232},[208,2431,2402],{"class":221},[208,2433,2434],{"class":232}," re.hash ",[208,2436,1386],{"class":221},[208,2438,2439],{"class":232}," hash\n",[208,2441,2443,2446,2448,2450,2452,2454,2457,2459,2461,2464,2466],{"class":210,"line":2442},85,[208,2444,2445],{"class":232},"    params ",[208,2447,272],{"class":221},[208,2449,2389],{"class":232},[208,2451,2392],{"class":228},[208,2453,477],{"class":232},[208,2455,2456],{"class":563},"'params'",[208,2458,358],{"class":232},[208,2460,2402],{"class":221},[208,2462,2463],{"class":232}," re.params ",[208,2465,1386],{"class":221},[208,2467,2468],{"class":232}," params\n",[208,2470,2472],{"class":210,"line":2471},86,[208,2473,286],{"emptyLinePlaceholder":285},[208,2475,2477,2479],{"class":210,"line":2476},87,[208,2478,384],{"class":221},[208,2480,2481],{"class":232}," (name) {\n",[208,2483,2485],{"class":210,"line":2484},88,[208,2486,2487],{"class":214},"      \u002F\u002F resolved named direct\n",[208,2489,2491,2493,2496,2498],{"class":210,"line":2490},89,[208,2492,1608],{"class":221},[208,2494,2495],{"class":275}," targetRecord",[208,2497,314],{"class":221},[208,2499,2500],{"class":232}," nameMap[name]\n",[208,2502,2504,2506,2508,2510,2512,2514],{"class":210,"line":2503},90,[208,2505,470],{"class":221},[208,2507,1283],{"class":232},[208,2509,1286],{"class":275},[208,2511,1289],{"class":221},[208,2513,1292],{"class":563},[208,2515,239],{"class":232},[208,2517,2519,2521,2524,2527,2529,2532],{"class":210,"line":2518},91,[208,2520,1299],{"class":228},[208,2522,2523],{"class":232},"(targetRecord, ",[208,2525,2526],{"class":563},"`redirect failed: named route \"${",[208,2528,1582],{"class":232},[208,2530,2531],{"class":563},"}\" not found.`",[208,2533,636],{"class":232},[208,2535,2537],{"class":210,"line":2536},92,[208,2538,619],{"class":232},[208,2540,2542,2544,2546],{"class":210,"line":2541},93,[208,2543,1904],{"class":221},[208,2545,1496],{"class":228},[208,2547,452],{"class":232},[208,2549,2551,2554,2557],{"class":210,"line":2550},94,[208,2552,2553],{"class":232},"        _normalized: ",[208,2555,2556],{"class":275},"true",[208,2558,1515],{"class":232},[208,2560,2562],{"class":210,"line":2561},95,[208,2563,2564],{"class":232},"        name,\n",[208,2566,2568],{"class":210,"line":2567},96,[208,2569,2570],{"class":232},"        query,\n",[208,2572,2574],{"class":210,"line":2573},97,[208,2575,2576],{"class":232},"        hash,\n",[208,2578,2580],{"class":210,"line":2579},98,[208,2581,2582],{"class":232},"        params\n",[208,2584,2586,2589,2592],{"class":210,"line":2585},99,[208,2587,2588],{"class":232},"      }, ",[208,2590,2591],{"class":275},"undefined",[208,2593,1679],{"class":232},[208,2595,2597,2599,2601,2603],{"class":210,"line":2596},100,[208,2598,1914],{"class":232},[208,2600,580],{"class":221},[208,2602,1919],{"class":221},[208,2604,2605],{"class":232}," (path) {\n",[208,2607,2609],{"class":210,"line":2608},101,[208,2610,2611],{"class":214},"      \u002F\u002F 1. resolve relative redirect\n",[208,2613,2615,2617,2620,2622,2625],{"class":210,"line":2614},102,[208,2616,1608],{"class":221},[208,2618,2619],{"class":275}," rawPath",[208,2621,314],{"class":221},[208,2623,2624],{"class":228}," resolveRecordPath",[208,2626,2627],{"class":232},"(path, record)\n",[208,2629,2631],{"class":210,"line":2630},103,[208,2632,2633],{"class":214},"      \u002F\u002F 2. resolve params\n",[208,2635,2637,2639,2642,2644,2646,2649,2652,2655,2657],{"class":210,"line":2636},104,[208,2638,1608],{"class":221},[208,2640,2641],{"class":275}," resolvedPath",[208,2643,314],{"class":221},[208,2645,1886],{"class":228},[208,2647,2648],{"class":232},"(rawPath, params, ",[208,2650,2651],{"class":563},"`redirect route with path \"${",[208,2653,2654],{"class":232},"rawPath",[208,2656,1897],{"class":563},[208,2658,636],{"class":232},[208,2660,2662],{"class":210,"line":2661},105,[208,2663,2664],{"class":214},"      \u002F\u002F 3. rematch with existing query and hash\n",[208,2666,2668,2670,2672],{"class":210,"line":2667},106,[208,2669,1904],{"class":221},[208,2671,1496],{"class":228},[208,2673,452],{"class":232},[208,2675,2677,2679,2681],{"class":210,"line":2676},107,[208,2678,2553],{"class":232},[208,2680,2556],{"class":275},[208,2682,1515],{"class":232},[208,2684,2686],{"class":210,"line":2685},108,[208,2687,2688],{"class":232},"        path: resolvedPath,\n",[208,2690,2692],{"class":210,"line":2691},109,[208,2693,2570],{"class":232},[208,2695,2697],{"class":210,"line":2696},110,[208,2698,2699],{"class":232},"        hash\n",[208,2701,2703,2705,2707],{"class":210,"line":2702},111,[208,2704,2588],{"class":232},[208,2706,2591],{"class":275},[208,2708,1679],{"class":232},[208,2710,2712,2714,2716],{"class":210,"line":2711},112,[208,2713,1914],{"class":232},[208,2715,580],{"class":221},[208,2717,364],{"class":232},[208,2719,2721,2723,2725,2727,2729,2731],{"class":210,"line":2720},113,[208,2722,470],{"class":221},[208,2724,1283],{"class":232},[208,2726,1286],{"class":275},[208,2728,1289],{"class":221},[208,2730,1292],{"class":563},[208,2732,239],{"class":232},[208,2734,2736,2738,2740,2742,2744,2746,2748,2750,2752,2754,2756,2758,2760],{"class":210,"line":2735},114,[208,2737,1638],{"class":228},[208,2739,477],{"class":232},[208,2741,1304],{"class":275},[208,2743,352],{"class":232},[208,2745,2275],{"class":563},[208,2747,2278],{"class":275},[208,2749,696],{"class":563},[208,2751,2283],{"class":228},[208,2753,477],{"class":563},[208,2755,2288],{"class":232},[208,2757,1413],{"class":563},[208,2759,1314],{"class":563},[208,2761,636],{"class":232},[208,2763,2765],{"class":210,"line":2764},115,[208,2766,619],{"class":232},[208,2768,2770,2772,2774,2776,2778],{"class":210,"line":2769},116,[208,2771,1904],{"class":221},[208,2773,1671],{"class":228},[208,2775,477],{"class":232},[208,2777,1676],{"class":275},[208,2779,1679],{"class":232},[208,2781,2783],{"class":210,"line":2782},117,[208,2784,430],{"class":232},[208,2786,2788],{"class":210,"line":2787},118,[208,2789,436],{"class":232},[208,2791,2793],{"class":210,"line":2792},119,[208,2794,286],{"emptyLinePlaceholder":285},[208,2796,2798,2800,2803,2805],{"class":210,"line":2797},120,[208,2799,1463],{"class":221},[208,2801,2802],{"class":228}," alias",[208,2804,1499],{"class":232},[208,2806,2807],{"class":214},"\u002F\u002F 处理别名\n",[208,2809,2811,2813,2815,2817],{"class":210,"line":2810},121,[208,2812,2082],{"class":236},[208,2814,1386],{"class":221},[208,2816,2087],{"class":228},[208,2818,1515],{"class":232},[208,2820,2822,2824,2826,2829],{"class":210,"line":2821},122,[208,2823,2095],{"class":236},[208,2825,1386],{"class":221},[208,2827,2828],{"class":228}," Location",[208,2830,1515],{"class":232},[208,2832,2834,2837,2839],{"class":210,"line":2833},123,[208,2835,2836],{"class":236},"    matchAs",[208,2838,1386],{"class":221},[208,2840,2841],{"class":275}," string\n",[208,2843,2845,2847,2849,2851],{"class":210,"line":2844},124,[208,2846,1543],{"class":232},[208,2848,1386],{"class":221},[208,2850,1526],{"class":228},[208,2852,364],{"class":232},[208,2854,2856,2858,2861,2863,2865,2868,2871,2874,2876],{"class":210,"line":2855},125,[208,2857,1554],{"class":221},[208,2859,2860],{"class":275}," aliasedPath",[208,2862,314],{"class":221},[208,2864,1886],{"class":228},[208,2866,2867],{"class":232},"(matchAs, location.params, ",[208,2869,2870],{"class":563},"`aliased route with path \"${",[208,2872,2873],{"class":232},"matchAs",[208,2875,1897],{"class":563},[208,2877,636],{"class":232},[208,2879,2881,2883,2886,2888,2890],{"class":210,"line":2880},126,[208,2882,1554],{"class":221},[208,2884,2885],{"class":275}," aliasedMatch",[208,2887,314],{"class":221},[208,2889,1496],{"class":228},[208,2891,452],{"class":232},[208,2893,2895,2898,2900],{"class":210,"line":2894},127,[208,2896,2897],{"class":232},"      _normalized: ",[208,2899,2556],{"class":275},[208,2901,1515],{"class":232},[208,2903,2905],{"class":210,"line":2904},128,[208,2906,2907],{"class":232},"      path: aliasedPath\n",[208,2909,2911],{"class":210,"line":2910},129,[208,2912,2913],{"class":232},"    })\n",[208,2915,2917,2919],{"class":210,"line":2916},130,[208,2918,384],{"class":221},[208,2920,2921],{"class":232}," (aliasedMatch) {\n",[208,2923,2925,2927,2930,2932],{"class":210,"line":2924},131,[208,2926,1608],{"class":221},[208,2928,2929],{"class":275}," matched",[208,2931,314],{"class":221},[208,2933,2934],{"class":232}," aliasedMatch.matched\n",[208,2936,2938,2940,2943,2945,2948,2950,2952,2955],{"class":210,"line":2937},132,[208,2939,1608],{"class":221},[208,2941,2942],{"class":275}," aliasedRecord",[208,2944,314],{"class":221},[208,2946,2947],{"class":232}," matched[matched.",[208,2949,1962],{"class":275},[208,2951,1843],{"class":221},[208,2953,2954],{"class":275}," 1",[208,2956,2957],{"class":232},"]\n",[208,2959,2961,2963,2965],{"class":210,"line":2960},133,[208,2962,1930],{"class":232},[208,2964,272],{"class":221},[208,2966,2967],{"class":232}," aliasedMatch.params\n",[208,2969,2971,2973,2975],{"class":210,"line":2970},134,[208,2972,1904],{"class":221},[208,2974,1671],{"class":228},[208,2976,2977],{"class":232},"(aliasedRecord, location)\n",[208,2979,2981],{"class":210,"line":2980},135,[208,2982,430],{"class":232},[208,2984,2986,2988,2990,2992,2994],{"class":210,"line":2985},136,[208,2987,2045],{"class":221},[208,2989,1671],{"class":228},[208,2991,477],{"class":232},[208,2993,1676],{"class":275},[208,2995,1679],{"class":232},[208,2997,2999],{"class":210,"line":2998},137,[208,3000,436],{"class":232},[208,3002,3004],{"class":210,"line":3003},138,[208,3005,286],{"emptyLinePlaceholder":285},[208,3007,3009,3011,3013,3016],{"class":210,"line":3008},139,[208,3010,1463],{"class":221},[208,3012,1671],{"class":228},[208,3014,3015],{"class":232}," (  ",[208,3017,3018],{"class":214},"\u002F\u002F 创建路由\n",[208,3020,3022,3024,3026,3029,3032],{"class":210,"line":3021},140,[208,3023,2082],{"class":236},[208,3025,1386],{"class":221},[208,3027,3028],{"class":221}," ?",[208,3030,3031],{"class":228},"RouteRecord",[208,3033,1515],{"class":232},[208,3035,3037,3039,3041,3043],{"class":210,"line":3036},141,[208,3038,2095],{"class":236},[208,3040,1386],{"class":221},[208,3042,2828],{"class":228},[208,3044,1515],{"class":232},[208,3046,3048,3050,3052],{"class":210,"line":3047},142,[208,3049,1533],{"class":236},[208,3051,1523],{"class":221},[208,3053,1538],{"class":228},[208,3055,3057,3059,3061,3063],{"class":210,"line":3056},143,[208,3058,1543],{"class":232},[208,3060,1386],{"class":221},[208,3062,1526],{"class":228},[208,3064,364],{"class":232},[208,3066,3068,3070,3073,3075],{"class":210,"line":3067},144,[208,3069,384],{"class":221},[208,3071,3072],{"class":232}," (record ",[208,3074,251],{"class":221},[208,3076,3077],{"class":232}," record.redirect) {\n",[208,3079,3081,3083,3085,3088,3090],{"class":210,"line":3080},145,[208,3082,1904],{"class":221},[208,3084,2071],{"class":228},[208,3086,3087],{"class":232},"(record, redirectedFrom ",[208,3089,608],{"class":221},[208,3091,3092],{"class":232}," location)\n",[208,3094,3096],{"class":210,"line":3095},146,[208,3097,430],{"class":232},[208,3099,3101,3103,3105,3107],{"class":210,"line":3100},147,[208,3102,384],{"class":221},[208,3104,3072],{"class":232},[208,3106,251],{"class":221},[208,3108,3109],{"class":232}," record.matchAs) {\n",[208,3111,3113,3115,3117],{"class":210,"line":3112},148,[208,3114,1904],{"class":221},[208,3116,2802],{"class":228},[208,3118,3119],{"class":232},"(record, location, record.matchAs)\n",[208,3121,3123],{"class":210,"line":3122},149,[208,3124,430],{"class":232},[208,3126,3128,3130,3133,3136],{"class":210,"line":3127},150,[208,3129,2045],{"class":221},[208,3131,3132],{"class":228}," createRoute",[208,3134,3135],{"class":232},"(record, location, redirectedFrom, router) ",[208,3137,3138],{"class":214},"\u002F\u002F 创建路由对象\n",[208,3140,3142],{"class":210,"line":3141},151,[208,3143,436],{"class":232},[208,3145,3147],{"class":210,"line":3146},152,[208,3148,286],{"emptyLinePlaceholder":285},[208,3150,3152,3155],{"class":210,"line":3151},153,[208,3153,3154],{"class":221},"  return",[208,3156,364],{"class":232},[208,3158,3160],{"class":210,"line":3159},154,[208,3161,3162],{"class":232},"    match,\n",[208,3164,3166],{"class":210,"line":3165},155,[208,3167,3168],{"class":232},"    addRoutes\n",[208,3170,3172],{"class":210,"line":3171},156,[208,3173,436],{"class":232},[208,3175,3177],{"class":210,"line":3176},157,[208,3178,867],{"class":232},[208,3180,3182],{"class":210,"line":3181},158,[208,3183,286],{"emptyLinePlaceholder":285},[208,3185,3187],{"class":210,"line":3186},159,[208,3188,3189],{"class":214},"\u002F\u002F dev\u002Fsrc\u002Fcreate-route-map.js line 7\n",[208,3191,3193,3195,3197,3199],{"class":210,"line":3192},160,[208,3194,222],{"class":221},[208,3196,225],{"class":221},[208,3198,1448],{"class":228},[208,3200,1378],{"class":232},[208,3202,3204,3206,3208,3210,3212,3214],{"class":210,"line":3203},161,[208,3205,1383],{"class":236},[208,3207,1386],{"class":221},[208,3209,1389],{"class":228},[208,3211,1392],{"class":232},[208,3213,1395],{"class":228},[208,3215,1398],{"class":232},[208,3217,3219,3222,3224,3226,3228,3231],{"class":210,"line":3218},162,[208,3220,3221],{"class":236},"  oldPathList",[208,3223,1523],{"class":221},[208,3225,1389],{"class":228},[208,3227,1392],{"class":232},[208,3229,3230],{"class":275},"string",[208,3232,1398],{"class":232},[208,3234,3236,3239,3241,3244,3246,3248],{"class":210,"line":3235},163,[208,3237,3238],{"class":236},"  oldPathMap",[208,3240,1523],{"class":221},[208,3242,3243],{"class":228}," Dictionary",[208,3245,1392],{"class":232},[208,3247,3031],{"class":228},[208,3249,1398],{"class":232},[208,3251,3253,3256,3258,3260,3262,3264],{"class":210,"line":3252},164,[208,3254,3255],{"class":236},"  oldNameMap",[208,3257,1523],{"class":221},[208,3259,3243],{"class":228},[208,3261,1392],{"class":232},[208,3263,3031],{"class":228},[208,3265,3266],{"class":232},">\n",[208,3268,3270,3272,3274],{"class":210,"line":3269},165,[208,3271,1413],{"class":232},[208,3273,1386],{"class":221},[208,3275,364],{"class":232},[208,3277,3279,3282,3284,3286,3288,3290],{"class":210,"line":3278},166,[208,3280,3281],{"class":236},"  pathList",[208,3283,1386],{"class":221},[208,3285,1389],{"class":228},[208,3287,1392],{"class":232},[208,3289,3230],{"class":275},[208,3291,1398],{"class":232},[208,3293,3295,3298,3300,3302,3304,3306],{"class":210,"line":3294},167,[208,3296,3297],{"class":236},"  pathMap",[208,3299,1386],{"class":221},[208,3301,3243],{"class":228},[208,3303,1392],{"class":232},[208,3305,3031],{"class":228},[208,3307,1398],{"class":232},[208,3309,3311,3314,3316,3318,3320,3322],{"class":210,"line":3310},168,[208,3312,3313],{"class":236},"  nameMap",[208,3315,1386],{"class":221},[208,3317,3243],{"class":228},[208,3319,1392],{"class":232},[208,3321,3031],{"class":228},[208,3323,3266],{"class":232},[208,3325,3327],{"class":210,"line":3326},169,[208,3328,3329],{"class":232},"} {\n",[208,3331,3333],{"class":210,"line":3332},170,[208,3334,3335],{"class":214},"  \u002F\u002F the path list is used to control path matching priority\n",[208,3337,3339,3341,3344,3346,3348,3350,3352,3355,3357,3360,3362,3365],{"class":210,"line":3338},171,[208,3340,308],{"class":221},[208,3342,3343],{"class":275}," pathList",[208,3345,1386],{"class":221},[208,3347,1389],{"class":228},[208,3349,1392],{"class":232},[208,3351,3230],{"class":275},[208,3353,3354],{"class":232},"> ",[208,3356,272],{"class":221},[208,3358,3359],{"class":232}," oldPathList ",[208,3361,608],{"class":221},[208,3363,3364],{"class":232}," [] ",[208,3366,3367],{"class":214},"\u002F\u002F 创建映射表\n",[208,3369,3371],{"class":210,"line":3370},172,[208,3372,3373],{"class":214},"  \u002F\u002F $flow-disable-line\n",[208,3375,3377,3379,3382,3384,3386,3388,3390,3392,3394,3397,3399,3402,3405,3407,3409],{"class":210,"line":3376},173,[208,3378,308],{"class":221},[208,3380,3381],{"class":275}," pathMap",[208,3383,1386],{"class":221},[208,3385,3243],{"class":228},[208,3387,1392],{"class":232},[208,3389,3031],{"class":228},[208,3391,3354],{"class":232},[208,3393,272],{"class":221},[208,3395,3396],{"class":232}," oldPathMap ",[208,3398,608],{"class":221},[208,3400,3401],{"class":232}," Object.",[208,3403,3404],{"class":228},"create",[208,3406,477],{"class":232},[208,3408,1676],{"class":275},[208,3410,636],{"class":232},[208,3412,3414],{"class":210,"line":3413},174,[208,3415,3373],{"class":214},[208,3417,3419,3421,3424,3426,3428,3430,3432,3434,3436,3439,3441,3443,3445,3447,3449],{"class":210,"line":3418},175,[208,3420,308],{"class":221},[208,3422,3423],{"class":275}," nameMap",[208,3425,1386],{"class":221},[208,3427,3243],{"class":228},[208,3429,1392],{"class":232},[208,3431,3031],{"class":228},[208,3433,3354],{"class":232},[208,3435,272],{"class":221},[208,3437,3438],{"class":232}," oldNameMap ",[208,3440,608],{"class":221},[208,3442,3401],{"class":232},[208,3444,3404],{"class":228},[208,3446,477],{"class":232},[208,3448,1676],{"class":275},[208,3450,636],{"class":232},[208,3452,3454],{"class":210,"line":3453},176,[208,3455,286],{"emptyLinePlaceholder":285},[208,3457,3459,3462,3465,3467,3470,3472,3474],{"class":210,"line":3458},177,[208,3460,3461],{"class":232},"  routes.",[208,3463,3464],{"class":228},"forEach",[208,3466,477],{"class":232},[208,3468,3469],{"class":236},"route",[208,3471,320],{"class":221},[208,3473,1427],{"class":232},[208,3475,3476],{"class":214},"\u002F\u002F 遍历路由配置，为每个配置添加路由记录\n",[208,3478,3480,3483],{"class":210,"line":3479},178,[208,3481,3482],{"class":228},"    addRouteRecord",[208,3484,3485],{"class":232},"(pathList, pathMap, nameMap, route)\n",[208,3487,3489],{"class":210,"line":3488},179,[208,3490,675],{"class":232},[208,3492,3494],{"class":210,"line":3493},180,[208,3495,286],{"emptyLinePlaceholder":285},[208,3497,3499],{"class":210,"line":3498},181,[208,3500,3501],{"class":214},"  \u002F\u002F ensure wildcard routes are always at the end\n",[208,3503,3505,3508,3510,3512,3514,3516,3518,3521,3523,3525,3527,3529,3531,3534,3536,3539],{"class":210,"line":3504},182,[208,3506,3507],{"class":221},"  for",[208,3509,233],{"class":232},[208,3511,1944],{"class":221},[208,3513,373],{"class":232},[208,3515,272],{"class":221},[208,3517,1951],{"class":275},[208,3519,3520],{"class":232},", l ",[208,3522,272],{"class":221},[208,3524,1959],{"class":232},[208,3526,1962],{"class":275},[208,3528,1954],{"class":232},[208,3530,1392],{"class":221},[208,3532,3533],{"class":232}," l; i",[208,3535,1968],{"class":221},[208,3537,3538],{"class":232},") { ",[208,3540,3541],{"class":214},"\u002F\u002F 确保通配符在最后\n",[208,3543,3545,3547,3550,3552,3555],{"class":210,"line":3544},183,[208,3546,384],{"class":221},[208,3548,3549],{"class":232}," (pathList[i] ",[208,3551,257],{"class":221},[208,3553,3554],{"class":563}," '*'",[208,3556,239],{"class":232},[208,3558,3560,3563,3566,3569,3572,3575,3577,3580,3583],{"class":210,"line":3559},184,[208,3561,3562],{"class":232},"      pathList.",[208,3564,3565],{"class":228},"push",[208,3567,3568],{"class":232},"(pathList.",[208,3570,3571],{"class":228},"splice",[208,3573,3574],{"class":232},"(i, ",[208,3576,1846],{"class":275},[208,3578,3579],{"class":232},")[",[208,3581,3582],{"class":275},"0",[208,3584,3585],{"class":232},"])\n",[208,3587,3589,3592],{"class":210,"line":3588},185,[208,3590,3591],{"class":232},"      l",[208,3593,3594],{"class":221},"--\n",[208,3596,3598,3600],{"class":210,"line":3597},186,[208,3599,421],{"class":232},[208,3601,3594],{"class":221},[208,3603,3605],{"class":210,"line":3604},187,[208,3606,430],{"class":232},[208,3608,3610],{"class":210,"line":3609},188,[208,3611,436],{"class":232},[208,3613,3615],{"class":210,"line":3614},189,[208,3616,286],{"emptyLinePlaceholder":285},[208,3618,3620,3622,3624,3626,3629,3632],{"class":210,"line":3619},190,[208,3621,245],{"class":221},[208,3623,1283],{"class":232},[208,3625,1286],{"class":275},[208,3627,3628],{"class":221}," ===",[208,3630,3631],{"class":563}," 'development'",[208,3633,239],{"class":232},[208,3635,3637],{"class":210,"line":3636},191,[208,3638,3639],{"class":214},"    \u002F\u002F warn if routes do not include leading slashes\n",[208,3641,3643,3645,3648,3650],{"class":210,"line":3642},192,[208,3644,1554],{"class":221},[208,3646,3647],{"class":275}," found",[208,3649,314],{"class":221},[208,3651,3652],{"class":232}," pathList\n",[208,3654,3656],{"class":210,"line":3655},193,[208,3657,3658],{"class":214},"    \u002F\u002F check for missing leading slash\n",[208,3660,3662,3665,3667,3669,3671,3673,3676,3678,3681,3684,3686,3688,3690,3692,3694,3696,3698,3700,3702,3704,3706,3708,3711],{"class":210,"line":3661},194,[208,3663,3664],{"class":232},"      .",[208,3666,1699],{"class":228},[208,3668,477],{"class":232},[208,3670,2359],{"class":236},[208,3672,320],{"class":221},[208,3674,3675],{"class":232}," path ",[208,3677,251],{"class":221},[208,3679,3680],{"class":232}," path.",[208,3682,3683],{"class":228},"charAt",[208,3685,477],{"class":232},[208,3687,3582],{"class":275},[208,3689,358],{"class":232},[208,3691,326],{"class":221},[208,3693,3554],{"class":563},[208,3695,1063],{"class":221},[208,3697,3680],{"class":232},[208,3699,3683],{"class":228},[208,3701,477],{"class":232},[208,3703,3582],{"class":275},[208,3705,358],{"class":232},[208,3707,326],{"class":221},[208,3709,3710],{"class":563}," '\u002F'",[208,3712,636],{"class":232},[208,3714,3716],{"class":210,"line":3715},195,[208,3717,286],{"emptyLinePlaceholder":285},[208,3719,3721,3723,3726,3728,3731,3733],{"class":210,"line":3720},196,[208,3722,384],{"class":221},[208,3724,3725],{"class":232}," (found.",[208,3727,1962],{"class":275},[208,3729,3730],{"class":221}," >",[208,3732,1951],{"class":275},[208,3734,239],{"class":232},[208,3736,3738,3740,3743,3745,3748,3750,3752,3754,3756,3759,3761,3763,3766,3769,3771,3774,3777,3779],{"class":210,"line":3737},197,[208,3739,1608],{"class":221},[208,3741,3742],{"class":275}," pathNames",[208,3744,314],{"class":221},[208,3746,3747],{"class":232}," found.",[208,3749,1718],{"class":228},[208,3751,477],{"class":232},[208,3753,2359],{"class":236},[208,3755,320],{"class":221},[208,3757,3758],{"class":563}," `- ${",[208,3760,2359],{"class":232},[208,3762,1314],{"class":563},[208,3764,3765],{"class":232},").",[208,3767,3768],{"class":228},"join",[208,3770,477],{"class":232},[208,3772,3773],{"class":563},"'",[208,3775,3776],{"class":275},"\\n",[208,3778,3773],{"class":563},[208,3780,636],{"class":232},[208,3782,3784,3787,3789,3791,3793,3796,3798,3801,3804,3806],{"class":210,"line":3783},198,[208,3785,3786],{"class":228},"      warn",[208,3788,477],{"class":232},[208,3790,1304],{"class":275},[208,3792,352],{"class":232},[208,3794,3795],{"class":563},"`Non-nested routes must include a leading slash character. Fix the following routes: ",[208,3797,3776],{"class":275},[208,3799,3800],{"class":563},"${",[208,3802,3803],{"class":232},"pathNames",[208,3805,1314],{"class":563},[208,3807,636],{"class":232},[208,3809,3811],{"class":210,"line":3810},199,[208,3812,430],{"class":232},[208,3814,3816],{"class":210,"line":3815},200,[208,3817,436],{"class":232},[208,3819,3821],{"class":210,"line":3820},201,[208,3822,286],{"emptyLinePlaceholder":285},[208,3824,3826,3828],{"class":210,"line":3825},202,[208,3827,3154],{"class":221},[208,3829,364],{"class":232},[208,3831,3833],{"class":210,"line":3832},203,[208,3834,3835],{"class":232},"    pathList,\n",[208,3837,3839],{"class":210,"line":3838},204,[208,3840,3841],{"class":232},"    pathMap,\n",[208,3843,3845],{"class":210,"line":3844},205,[208,3846,3847],{"class":232},"    nameMap\n",[208,3849,3851],{"class":210,"line":3850},206,[208,3852,436],{"class":232},[208,3854,3856],{"class":210,"line":3855},207,[208,3857,867],{"class":232},[208,3859,3861],{"class":210,"line":3860},208,[208,3862,286],{"emptyLinePlaceholder":285},[208,3864,3866,3869,3872,3874],{"class":210,"line":3865},209,[208,3867,3868],{"class":221},"function",[208,3870,3871],{"class":228}," addRouteRecord",[208,3873,1499],{"class":232},[208,3875,3876],{"class":214},"\u002F\u002F 添加路由记录\n",[208,3878,3880,3882,3884,3886,3888,3890],{"class":210,"line":3879},210,[208,3881,3281],{"class":236},[208,3883,1386],{"class":221},[208,3885,1389],{"class":228},[208,3887,1392],{"class":232},[208,3889,3230],{"class":275},[208,3891,1398],{"class":232},[208,3893,3895,3897,3899,3901,3903,3905],{"class":210,"line":3894},211,[208,3896,3297],{"class":236},[208,3898,1386],{"class":221},[208,3900,3243],{"class":228},[208,3902,1392],{"class":232},[208,3904,3031],{"class":228},[208,3906,1398],{"class":232},[208,3908,3910,3912,3914,3916,3918,3920],{"class":210,"line":3909},212,[208,3911,3313],{"class":236},[208,3913,1386],{"class":221},[208,3915,3243],{"class":228},[208,3917,1392],{"class":232},[208,3919,3031],{"class":228},[208,3921,1398],{"class":232},[208,3923,3925,3928,3930,3933],{"class":210,"line":3924},213,[208,3926,3927],{"class":236},"  route",[208,3929,1386],{"class":221},[208,3931,3932],{"class":228}," RouteConfig",[208,3934,1515],{"class":232},[208,3936,3938,3941,3943,3945],{"class":210,"line":3937},214,[208,3939,3940],{"class":236},"  parent",[208,3942,1523],{"class":221},[208,3944,2087],{"class":228},[208,3946,1515],{"class":232},[208,3948,3950,3953,3955],{"class":210,"line":3949},215,[208,3951,3952],{"class":236},"  matchAs",[208,3954,1523],{"class":221},[208,3956,2841],{"class":275},[208,3958,3960],{"class":210,"line":3959},216,[208,3961,239],{"class":232},[208,3963,3965,3967,3969,3971,3973,3975,3977,3979,3982],{"class":210,"line":3964},217,[208,3966,308],{"class":221},[208,3968,1427],{"class":232},[208,3970,2359],{"class":275},[208,3972,352],{"class":232},[208,3974,1582],{"class":275},[208,3976,1443],{"class":232},[208,3978,272],{"class":221},[208,3980,3981],{"class":232}," route ",[208,3983,3984],{"class":214},"\u002F\u002F 获得路由配置下的属性\n",[208,3986,3988,3990,3992,3994,3996,3998],{"class":210,"line":3987},218,[208,3989,245],{"class":221},[208,3991,1283],{"class":232},[208,3993,1286],{"class":275},[208,3995,1289],{"class":221},[208,3997,1292],{"class":563},[208,3999,239],{"class":232},[208,4001,4003,4006,4009,4012,4015,4017,4020],{"class":210,"line":4002},219,[208,4004,4005],{"class":228},"    assert",[208,4007,4008],{"class":232},"(path ",[208,4010,4011],{"class":221},"!=",[208,4013,4014],{"class":275}," null",[208,4016,352],{"class":232},[208,4018,4019],{"class":563},"`\"path\" is required in a route configuration.`",[208,4021,636],{"class":232},[208,4023,4025,4027],{"class":210,"line":4024},220,[208,4026,4005],{"class":228},[208,4028,2264],{"class":232},[208,4030,4032,4035,4038,4040,4042],{"class":210,"line":4031},221,[208,4033,4034],{"class":221},"      typeof",[208,4036,4037],{"class":232}," route.component ",[208,4039,326],{"class":221},[208,4041,2194],{"class":563},[208,4043,1515],{"class":232},[208,4045,4047,4050,4053],{"class":210,"line":4046},222,[208,4048,4049],{"class":563},"      `route config \"component\" for path: ${",[208,4051,4052],{"class":228},"String",[208,4054,2264],{"class":563},[208,4056,4058,4061,4064],{"class":210,"line":4057},223,[208,4059,4060],{"class":232},"        path",[208,4062,4063],{"class":221}," ||",[208,4065,4066],{"class":232}," name\n",[208,4068,4070,4073,4076,4079],{"class":210,"line":4069},224,[208,4071,4072],{"class":563},"      )",[208,4074,4075],{"class":563},"} cannot be a `",[208,4077,4078],{"class":221}," +",[208,4080,4081],{"class":563}," `string id. Use an actual component instead.`\n",[208,4083,4085],{"class":210,"line":4084},225,[208,4086,4087],{"class":232},"    )\n",[208,4089,4091],{"class":210,"line":4090},226,[208,4092,436],{"class":232},[208,4094,4096],{"class":210,"line":4095},227,[208,4097,286],{"emptyLinePlaceholder":285},[208,4099,4101,4103,4106,4108,4111],{"class":210,"line":4100},228,[208,4102,308],{"class":221},[208,4104,4105],{"class":275}," pathToRegexpOptions",[208,4107,1386],{"class":221},[208,4109,4110],{"class":228}," PathToRegexpOptions",[208,4112,4113],{"class":221}," =\n",[208,4115,4117,4120,4122],{"class":210,"line":4116},229,[208,4118,4119],{"class":232},"    route.pathToRegexpOptions ",[208,4121,608],{"class":221},[208,4123,1760],{"class":232},[208,4125,4127,4129,4132,4134,4137],{"class":210,"line":4126},230,[208,4128,308],{"class":221},[208,4130,4131],{"class":275}," normalizedPath",[208,4133,314],{"class":221},[208,4135,4136],{"class":228}," normalizePath",[208,4138,4139],{"class":232},"(path, parent, pathToRegexpOptions.strict)\n",[208,4141,4143],{"class":210,"line":4142},231,[208,4144,286],{"emptyLinePlaceholder":285},[208,4146,4148,4150,4152,4154,4157,4159,4162],{"class":210,"line":4147},232,[208,4149,245],{"class":221},[208,4151,233],{"class":232},[208,4153,1740],{"class":221},[208,4155,4156],{"class":232}," route.caseSensitive ",[208,4158,257],{"class":221},[208,4160,4161],{"class":563}," 'boolean'",[208,4163,239],{"class":232},[208,4165,4167,4170,4172],{"class":210,"line":4166},233,[208,4168,4169],{"class":232},"    pathToRegexpOptions.sensitive ",[208,4171,272],{"class":221},[208,4173,4174],{"class":232}," route.caseSensitive\n",[208,4176,4178],{"class":210,"line":4177},234,[208,4179,436],{"class":232},[208,4181,4183],{"class":210,"line":4182},235,[208,4184,286],{"emptyLinePlaceholder":285},[208,4186,4188,4190,4192,4194,4196,4198,4200],{"class":210,"line":4187},236,[208,4189,308],{"class":221},[208,4191,1611],{"class":275},[208,4193,1386],{"class":221},[208,4195,2087],{"class":228},[208,4197,314],{"class":221},[208,4199,1427],{"class":232},[208,4201,4202],{"class":214},"\u002F\u002F 生成记录对象\n",[208,4204,4206],{"class":210,"line":4205},237,[208,4207,4208],{"class":232},"    path: normalizedPath,\n",[208,4210,4212,4215,4218],{"class":210,"line":4211},238,[208,4213,4214],{"class":232},"    regex: ",[208,4216,4217],{"class":228},"compileRouteRegex",[208,4219,4220],{"class":232},"(normalizedPath, pathToRegexpOptions),\n",[208,4222,4224,4227,4229],{"class":210,"line":4223},239,[208,4225,4226],{"class":232},"    components: route.components ",[208,4228,608],{"class":221},[208,4230,4231],{"class":232}," { default: route.component },\n",[208,4233,4235],{"class":210,"line":4234},240,[208,4236,4237],{"class":232},"    instances: {},\n",[208,4239,4241],{"class":210,"line":4240},241,[208,4242,4243],{"class":232},"    name,\n",[208,4245,4247],{"class":210,"line":4246},242,[208,4248,4249],{"class":232},"    parent,\n",[208,4251,4253],{"class":210,"line":4252},243,[208,4254,4255],{"class":232},"    matchAs,\n",[208,4257,4259],{"class":210,"line":4258},244,[208,4260,4261],{"class":232},"    redirect: route.redirect,\n",[208,4263,4265],{"class":210,"line":4264},245,[208,4266,4267],{"class":232},"    beforeEnter: route.beforeEnter,\n",[208,4269,4271,4274,4276],{"class":210,"line":4270},246,[208,4272,4273],{"class":232},"    meta: route.meta ",[208,4275,608],{"class":221},[208,4277,4278],{"class":232}," {},\n",[208,4280,4282],{"class":210,"line":4281},247,[208,4283,4284],{"class":232},"    props:\n",[208,4286,4288,4291,4294],{"class":210,"line":4287},248,[208,4289,4290],{"class":232},"      route.props ",[208,4292,4293],{"class":221},"==",[208,4295,934],{"class":275},[208,4297,4299,4302],{"class":210,"line":4298},249,[208,4300,4301],{"class":221},"        ?",[208,4303,1760],{"class":232},[208,4305,4307,4310],{"class":210,"line":4306},250,[208,4308,4309],{"class":221},"        :",[208,4311,4312],{"class":232}," route.components\n",[208,4314,4316,4319],{"class":210,"line":4315},251,[208,4317,4318],{"class":221},"          ?",[208,4320,4321],{"class":232}," route.props\n",[208,4323,4325,4328],{"class":210,"line":4324},252,[208,4326,4327],{"class":221},"          :",[208,4329,4330],{"class":232}," { default: route.props }\n",[208,4332,4334],{"class":210,"line":4333},253,[208,4335,436],{"class":232},[208,4337,4339],{"class":210,"line":4338},254,[208,4340,286],{"emptyLinePlaceholder":285},[208,4342,4344,4346],{"class":210,"line":4343},255,[208,4345,245],{"class":221},[208,4347,4348],{"class":232}," (route.children) { \n",[208,4350,4352],{"class":210,"line":4351},256,[208,4353,4354],{"class":214},"    \u002F\u002F Warn if route is named, does not redirect and has a default child route.\n",[208,4356,4358],{"class":210,"line":4357},257,[208,4359,4360],{"class":214},"    \u002F\u002F If users navigate to this route by name, the default child will\n",[208,4362,4364],{"class":210,"line":4363},258,[208,4365,4366],{"class":214},"    \u002F\u002F not be rendered (GH Issue #629)\n",[208,4368,4370,4372,4374,4376,4378,4380],{"class":210,"line":4369},259,[208,4371,384],{"class":221},[208,4373,1283],{"class":232},[208,4375,1286],{"class":275},[208,4377,1289],{"class":221},[208,4379,1292],{"class":563},[208,4381,239],{"class":232},[208,4383,4385,4387],{"class":210,"line":4384},260,[208,4386,470],{"class":221},[208,4388,1378],{"class":232},[208,4390,4392,4395],{"class":210,"line":4391},261,[208,4393,4394],{"class":232},"        route.name ",[208,4396,4397],{"class":221},"&&\n",[208,4399,4401,4404,4407],{"class":210,"line":4400},262,[208,4402,4403],{"class":221},"        !",[208,4405,4406],{"class":232},"route.redirect ",[208,4408,4397],{"class":221},[208,4410,4412,4415,4418,4420,4423,4425,4428,4431,4435,4438,4441,4443,4446],{"class":210,"line":4411},263,[208,4413,4414],{"class":232},"        route.children.",[208,4416,4417],{"class":228},"some",[208,4419,477],{"class":232},[208,4421,4422],{"class":236},"child",[208,4424,320],{"class":221},[208,4426,4427],{"class":563}," \u002F",[208,4429,4430],{"class":221},"^",[208,4432,4434],{"class":4433},"snhLl","\\\u002F",[208,4436,4437],{"class":221},"?$",[208,4439,4440],{"class":563},"\u002F",[208,4442,696],{"class":232},[208,4444,4445],{"class":228},"test",[208,4447,4448],{"class":232},"(child.path))\n",[208,4450,4452],{"class":210,"line":4451},264,[208,4453,4454],{"class":232},"      ) {\n",[208,4456,4458,4460],{"class":210,"line":4457},265,[208,4459,1638],{"class":228},[208,4461,2264],{"class":232},[208,4463,4465,4467],{"class":210,"line":4464},266,[208,4466,2270],{"class":275},[208,4468,1515],{"class":232},[208,4470,4472,4475,4477,4479,4481,4484],{"class":210,"line":4471},267,[208,4473,4474],{"class":563},"          `Named Route '${",[208,4476,3469],{"class":232},[208,4478,696],{"class":563},[208,4480,1582],{"class":232},[208,4482,4483],{"class":563},"}' has a default child route. `",[208,4485,4486],{"class":221}," +\n",[208,4488,4490],{"class":210,"line":4489},268,[208,4491,4492],{"class":563},"            `When navigating to this named route (:to=\"{name: '${\n",[208,4494,4496,4499,4501],{"class":210,"line":4495},269,[208,4497,4498],{"class":232},"              route",[208,4500,696],{"class":563},[208,4502,4503],{"class":232},"name\n",[208,4505,4507,4510],{"class":210,"line":4506},270,[208,4508,4509],{"class":563},"            }'\"), `",[208,4511,4486],{"class":221},[208,4513,4515,4518],{"class":210,"line":4514},271,[208,4516,4517],{"class":563},"            `the default child route will not be rendered. Remove the name from `",[208,4519,4486],{"class":221},[208,4521,4523,4526],{"class":210,"line":4522},272,[208,4524,4525],{"class":563},"            `this route and use the name of the default child route for named `",[208,4527,4486],{"class":221},[208,4529,4531],{"class":210,"line":4530},273,[208,4532,4533],{"class":563},"            `links instead.`\n",[208,4535,4537],{"class":210,"line":4536},274,[208,4538,2299],{"class":232},[208,4540,4542],{"class":210,"line":4541},275,[208,4543,619],{"class":232},[208,4545,4547],{"class":210,"line":4546},276,[208,4548,430],{"class":232},[208,4550,4552,4555,4557,4559,4561,4563,4565],{"class":210,"line":4551},277,[208,4553,4554],{"class":232},"    route.children.",[208,4556,3464],{"class":228},[208,4558,477],{"class":232},[208,4560,4422],{"class":236},[208,4562,320],{"class":221},[208,4564,1427],{"class":232},[208,4566,4567],{"class":214},"\u002F\u002F 递归路由配置的 children 属性，添加路由记录\n",[208,4569,4571,4573,4576,4578],{"class":210,"line":4570},278,[208,4572,1608],{"class":221},[208,4574,4575],{"class":275}," childMatchAs",[208,4577,314],{"class":221},[208,4579,4580],{"class":232}," matchAs\n",[208,4582,4584,4586,4589,4591,4594,4596,4599,4601,4603,4605,4607],{"class":210,"line":4583},279,[208,4585,4301],{"class":221},[208,4587,4588],{"class":228}," cleanPath",[208,4590,477],{"class":232},[208,4592,4593],{"class":563},"`${",[208,4595,2873],{"class":232},[208,4597,4598],{"class":563},"}\u002F${",[208,4600,4422],{"class":232},[208,4602,696],{"class":563},[208,4604,2359],{"class":232},[208,4606,1314],{"class":563},[208,4608,636],{"class":232},[208,4610,4612,4614],{"class":210,"line":4611},280,[208,4613,4309],{"class":221},[208,4615,329],{"class":275},[208,4617,4619,4622],{"class":210,"line":4618},281,[208,4620,4621],{"class":228},"      addRouteRecord",[208,4623,4624],{"class":232},"(pathList, pathMap, nameMap, child, record, childMatchAs)\n",[208,4626,4628],{"class":210,"line":4627},282,[208,4629,2913],{"class":232},[208,4631,4633],{"class":210,"line":4632},283,[208,4634,436],{"class":232},[208,4636,4638],{"class":210,"line":4637},284,[208,4639,286],{"emptyLinePlaceholder":285},[208,4641,4643,4645,4647,4649,4652],{"class":210,"line":4642},285,[208,4644,245],{"class":221},[208,4646,233],{"class":232},[208,4648,1114],{"class":221},[208,4650,4651],{"class":232},"pathMap[record.path]) { ",[208,4653,4654],{"class":214},"\u002F\u002F 如果有多个相同的路径，只有第一个起作用，后面的会被忽略\n",[208,4656,4658,4661,4663],{"class":210,"line":4657},286,[208,4659,4660],{"class":232},"    pathList.",[208,4662,3565],{"class":228},[208,4664,4665],{"class":232},"(record.path)\n",[208,4667,4669,4672,4674],{"class":210,"line":4668},287,[208,4670,4671],{"class":232},"    pathMap[record.path] ",[208,4673,272],{"class":221},[208,4675,4676],{"class":232}," record\n",[208,4678,4680],{"class":210,"line":4679},288,[208,4681,436],{"class":232},[208,4683,4685],{"class":210,"line":4684},289,[208,4686,286],{"emptyLinePlaceholder":285},[208,4688,4690,4692,4695,4697,4700,4702],{"class":210,"line":4689},290,[208,4691,245],{"class":221},[208,4693,4694],{"class":232}," (route.alias ",[208,4696,326],{"class":221},[208,4698,4699],{"class":275}," undefined",[208,4701,3538],{"class":232},[208,4703,4704],{"class":214},"\u002F\u002F 如果路由有别名的话，给别名也添加路由记录\n",[208,4706,4708,4710,4713,4715,4718,4721,4724,4726,4729,4731],{"class":210,"line":4707},291,[208,4709,1554],{"class":221},[208,4711,4712],{"class":275}," aliases",[208,4714,314],{"class":221},[208,4716,4717],{"class":232}," Array.",[208,4719,4720],{"class":228},"isArray",[208,4722,4723],{"class":232},"(route.alias) ",[208,4725,2402],{"class":221},[208,4727,4728],{"class":232}," route.alias ",[208,4730,1386],{"class":221},[208,4732,4733],{"class":232}," [route.alias]\n",[208,4735,4737,4740,4742,4744,4746,4748,4750,4752,4754,4757,4759,4762,4764],{"class":210,"line":4736},292,[208,4738,4739],{"class":221},"    for",[208,4741,233],{"class":232},[208,4743,1944],{"class":221},[208,4745,373],{"class":232},[208,4747,272],{"class":221},[208,4749,1951],{"class":275},[208,4751,1954],{"class":232},[208,4753,1392],{"class":221},[208,4755,4756],{"class":232}," aliases.",[208,4758,1962],{"class":275},[208,4760,4761],{"class":232},"; ",[208,4763,1968],{"class":221},[208,4765,4766],{"class":232},"i) {\n",[208,4768,4770,4772,4774,4776],{"class":210,"line":4769},293,[208,4771,1608],{"class":221},[208,4773,2802],{"class":275},[208,4775,314],{"class":221},[208,4777,4778],{"class":232}," aliases[i]\n",[208,4780,4782,4784,4786,4788,4790,4792,4794,4797,4799],{"class":210,"line":4781},294,[208,4783,470],{"class":221},[208,4785,1283],{"class":232},[208,4787,1286],{"class":275},[208,4789,1289],{"class":221},[208,4791,1292],{"class":563},[208,4793,1063],{"class":221},[208,4795,4796],{"class":232}," alias ",[208,4798,257],{"class":221},[208,4800,4801],{"class":232}," path) {\n",[208,4803,4805,4807],{"class":210,"line":4804},295,[208,4806,1638],{"class":228},[208,4808,2264],{"class":232},[208,4810,4812,4814],{"class":210,"line":4811},296,[208,4813,2270],{"class":275},[208,4815,1515],{"class":232},[208,4817,4819,4822,4824],{"class":210,"line":4818},297,[208,4820,4821],{"class":563},"          `Found an alias with the same value as the path: \"${",[208,4823,2359],{"class":232},[208,4825,4826],{"class":563},"}\". You have to remove that alias. It will be ignored in development.`\n",[208,4828,4830],{"class":210,"line":4829},298,[208,4831,2299],{"class":232},[208,4833,4835],{"class":210,"line":4834},299,[208,4836,4837],{"class":214},"        \u002F\u002F skip in dev to make it work\n",[208,4839,4841],{"class":210,"line":4840},300,[208,4842,4843],{"class":221},"        continue\n",[208,4845,4847],{"class":210,"line":4846},301,[208,4848,619],{"class":232},[208,4850,4852],{"class":210,"line":4851},302,[208,4853,286],{"emptyLinePlaceholder":285},[208,4855,4857,4859,4862,4864],{"class":210,"line":4856},303,[208,4858,1608],{"class":221},[208,4860,4861],{"class":275}," aliasRoute",[208,4863,314],{"class":221},[208,4865,364],{"class":232},[208,4867,4869],{"class":210,"line":4868},304,[208,4870,4871],{"class":232},"        path: alias,\n",[208,4873,4875],{"class":210,"line":4874},305,[208,4876,4877],{"class":232},"        children: route.children\n",[208,4879,4881],{"class":210,"line":4880},306,[208,4882,619],{"class":232},[208,4884,4886,4888],{"class":210,"line":4885},307,[208,4887,4621],{"class":228},[208,4889,2264],{"class":232},[208,4891,4893],{"class":210,"line":4892},308,[208,4894,4895],{"class":232},"        pathList,\n",[208,4897,4899],{"class":210,"line":4898},309,[208,4900,4901],{"class":232},"        pathMap,\n",[208,4903,4905],{"class":210,"line":4904},310,[208,4906,4907],{"class":232},"        nameMap,\n",[208,4909,4911],{"class":210,"line":4910},311,[208,4912,4913],{"class":232},"        aliasRoute,\n",[208,4915,4917],{"class":210,"line":4916},312,[208,4918,4919],{"class":232},"        parent,\n",[208,4921,4923,4926,4928,4930],{"class":210,"line":4922},313,[208,4924,4925],{"class":232},"        record.path ",[208,4927,608],{"class":221},[208,4929,3710],{"class":563},[208,4931,4932],{"class":214}," \u002F\u002F matchAs\n",[208,4934,4936],{"class":210,"line":4935},314,[208,4937,4938],{"class":232},"      )\n",[208,4940,4942],{"class":210,"line":4941},315,[208,4943,430],{"class":232},[208,4945,4947],{"class":210,"line":4946},316,[208,4948,436],{"class":232},[208,4950,4952],{"class":210,"line":4951},317,[208,4953,286],{"emptyLinePlaceholder":285},[208,4955,4957,4959],{"class":210,"line":4956},318,[208,4958,245],{"class":221},[208,4960,2481],{"class":232},[208,4962,4964,4966,4968,4970],{"class":210,"line":4963},319,[208,4965,384],{"class":221},[208,4967,233],{"class":232},[208,4969,1114],{"class":221},[208,4971,4972],{"class":232},"nameMap[name]) {\n",[208,4974,4976,4979,4981],{"class":210,"line":4975},320,[208,4977,4978],{"class":232},"      nameMap[name] ",[208,4980,272],{"class":221},[208,4982,4676],{"class":232},[208,4984,4986,4988,4990,4992,4994,4996,4998,5000,5002,5004],{"class":210,"line":4985},321,[208,4987,1914],{"class":232},[208,4989,580],{"class":221},[208,4991,1919],{"class":221},[208,4993,1283],{"class":232},[208,4995,1286],{"class":275},[208,4997,1289],{"class":221},[208,4999,1292],{"class":563},[208,5001,1063],{"class":221},[208,5003,1066],{"class":221},[208,5005,5006],{"class":232},"matchAs) {\n",[208,5008,5010,5012],{"class":210,"line":5009},322,[208,5011,3786],{"class":228},[208,5013,2264],{"class":232},[208,5015,5017,5020],{"class":210,"line":5016},323,[208,5018,5019],{"class":275},"        false",[208,5021,1515],{"class":232},[208,5023,5025,5028],{"class":210,"line":5024},324,[208,5026,5027],{"class":563},"        `Duplicate named routes definition: `",[208,5029,4486],{"class":221},[208,5031,5033,5036,5038,5041,5044,5046,5048],{"class":210,"line":5032},325,[208,5034,5035],{"class":563},"          `{ name: \"${",[208,5037,1582],{"class":232},[208,5039,5040],{"class":563},"}\", path: \"${",[208,5042,5043],{"class":232},"record",[208,5045,696],{"class":563},[208,5047,2359],{"class":232},[208,5049,5050],{"class":563},"}\" }`\n",[208,5052,5054],{"class":210,"line":5053},326,[208,5055,4938],{"class":232},[208,5057,5059],{"class":210,"line":5058},327,[208,5060,430],{"class":232},[208,5062,5064],{"class":210,"line":5063},328,[208,5065,436],{"class":232},[208,5067,5069],{"class":210,"line":5068},329,[208,5070,867],{"class":232},[14,5072,5073,5074,5077,5078,5080,5081,5084,5085,5087,5088,5090,5091,5094,5095,5097,5098,5101,5102,5104,5105,5107,5108,5110,5111,1349,5114,5117,5118,5120,5121,188,5124,5127],{},"在上文的构造函数中实例化的",[17,5075,5076],{},"HTML5History","对象就是对于",[17,5079,44],{},"模式下的路由的处理，主要是通过继承",[17,5082,5083],{},"History","对象以及自身实现的方法完成路由。在初始化",[17,5086,154],{},"时调用的",[17,5089,530],{},"方法调用了路由切换以及调用了",[17,5092,5093],{},"setupListeners","方法实现了路由的切换的监听回调，注意此时并没有在",[17,5096,5076],{},"对象的构造函数中直接添加事件监听，这是因为需要避免在某些浏览器中调度第一个",[17,5099,5100],{},"popstate","事件，但是由于异步保护，第一个历史记录路由未同时更新的问题。",[17,5103,44],{},"模式的代码结构以及更新视图的逻辑与",[17,5106,33],{},"模式基本类似，主要是监听",[17,5109,5100],{},"事件以及对于",[17,5112,5113],{},"push()",[17,5115,5116],{},"replace()","方法的变动，使用",[17,5119,5083],{},"对象的",[17,5122,5123],{},"pushState()",[17,5125,5126],{},"replaceState()","等方法进行路由的变换。",[108,5129,5131],{"className":202,"code":5130,"language":204,"meta":116,"style":116},"\u002F\u002F dev\u002Fsrc\u002Findex.js line 21\nexport default class VueRouter {\n  \u002F\u002F...\n  init (app: any \u002F* Vue component instance *\u002F) {\n    process.env.NODE_ENV !== 'production' &&\n      assert(\n        install.installed,\n        `not installed. Make sure to call \\`Vue.use(VueRouter)\\` ` +\n          `before creating root instance.`\n      )\n\n    this.apps.push(app)\n\n    \u002F\u002F set up app destroyed handler\n    \u002F\u002F https:\u002F\u002Fgithub.com\u002Fvuejs\u002Fvue-router\u002Fissues\u002F2639\n    app.$once('hook:destroyed', () => {\n      \u002F\u002F clean out app from this.apps array once destroyed\n      const index = this.apps.indexOf(app)\n      if (index > -1) this.apps.splice(index, 1)\n      \u002F\u002F ensure we still have a main app or null if no apps\n      \u002F\u002F we do not release the router so it can be reused\n      if (this.app === app) this.app = this.apps[0] || null\n\n      if (!this.app) this.history.teardown()\n    })\n\n    \u002F\u002F main app previously initialized\n    \u002F\u002F return as we don't need to set up new history listener\n    if (this.app) {\n      return\n    }\n\n    this.app = app\n\n    const history = this.history\n\n    if (history instanceof HTML5History || history instanceof HashHistory) {\n      const handleInitialScroll = routeOrError => {\n        const from = history.current\n        const expectScroll = this.options.scrollBehavior\n        const supportsScroll = supportsPushState && expectScroll\n\n        if (supportsScroll && 'fullPath' in routeOrError) {\n          handleScroll(this, routeOrError, from, false)\n        }\n      }\n      const setupListeners = routeOrError => {\n        history.setupListeners() \u002F\u002F 初始化添加事件监听\n        handleInitialScroll(routeOrError)\n      }\n      history.transitionTo( \u002F\u002F 如果默认页，需要根据当前浏览器地址栏里的 path 或者 hash 来激活对应的路由\n        history.getCurrentLocation(),\n        setupListeners,\n        setupListeners\n      )\n    }\n\n    history.listen(route => {\n      this.apps.forEach(app => {\n        app._route = route\n      })\n    })\n  }\n  \u002F\u002F...\n}\n\n\u002F\u002F dev\u002Fsrc\u002Fhistory\u002Fbase.js line 24\nexport class History {\n  \u002F\u002F ...\n\n  transitionTo (\n    location: RawLocation,\n    onComplete?: Function,\n    onAbort?: Function\n  ) {\n    let route\n    \u002F\u002F catch redirect option https:\u002F\u002Fgithub.com\u002Fvuejs\u002Fvue-router\u002Fissues\u002F3201\n    try {\n      route = this.router.match(location, this.current) \u002F\u002F \u002F\u002F 获取匹配的路由信息\n    } catch (e) {\n      this.errorCbs.forEach(cb => {\n        cb(e)\n      })\n      \u002F\u002F Exception should still be thrown\n      throw e\n    }\n    const prev = this.current\n    this.confirmTransition( \u002F\u002F 确认跳转\n      route,\n      () => {\n        this.updateRoute(route) \u002F\u002F 更新当前 route 对象\n        onComplete && onComplete(route)\n        this.ensureURL() \u002F\u002F 子类实现的更新url地址 对于 hash 模式的话 就是更新 hash 的值\n        this.router.afterHooks.forEach(hook => {\n          hook && hook(route, prev)\n        })\n\n        \u002F\u002F fire ready cbs once\n        if (!this.ready) {\n          this.ready = true\n          this.readyCbs.forEach(cb => {\n            cb(route)\n          })\n        }\n      },\n      err => {\n        if (onAbort) {\n          onAbort(err)\n        }\n        if (err && !this.ready) {\n          \u002F\u002F Initial redirection should not mark the history as ready yet\n          \u002F\u002F because it's triggered by the redirection instead\n          \u002F\u002F https:\u002F\u002Fgithub.com\u002Fvuejs\u002Fvue-router\u002Fissues\u002F3225\n          \u002F\u002F https:\u002F\u002Fgithub.com\u002Fvuejs\u002Fvue-router\u002Fissues\u002F3331\n          if (!isNavigationFailure(err, NavigationFailureType.redirected) || prev !== START) {\n            this.ready = true\n            this.readyErrorCbs.forEach(cb => {\n              cb(err)\n            })\n          }\n        }\n      }\n    )\n  }\n\n  confirmTransition (route: Route, onComplete: Function, onAbort?: Function) {\n    const current = this.current\n    this.pending = route\n    const abort = err => {\n      \u002F\u002F changed after adding errors with\n      \u002F\u002F https:\u002F\u002Fgithub.com\u002Fvuejs\u002Fvue-router\u002Fpull\u002F3047 before that change,\n      \u002F\u002F redirect and aborted navigation would produce an err == null\n      if (!isNavigationFailure(err) && isError(err)) {\n        if (this.errorCbs.length) {\n          this.errorCbs.forEach(cb => {\n            cb(err)\n          })\n        } else {\n          warn(false, 'uncaught error during route navigation:')\n          console.error(err)\n        }\n      }\n      onAbort && onAbort(err)\n    }\n    const lastRouteIndex = route.matched.length - 1\n    const lastCurrentIndex = current.matched.length - 1\n    if (\n      isSameRoute(route, current) && \u002F\u002F 如果是相同的路由就不跳转\n      \u002F\u002F in the case the route map has been dynamically appended to\n      lastRouteIndex === lastCurrentIndex &&\n      route.matched[lastRouteIndex] === current.matched[lastCurrentIndex]\n    ) {\n      this.ensureURL()\n      return abort(createNavigationDuplicatedError(current, route))\n    }\n\n    const { updated, deactivated, activated } = resolveQueue( \u002F\u002F 通过对比路由解析出可复用的组件，需要渲染的组件，失活的组件\n      this.current.matched,\n      route.matched\n    )\n\n    const queue: Array\u003C?NavigationGuard> = [].concat( \u002F\u002F 导航守卫数组\n      \u002F\u002F in-component leave guards\n      extractLeaveGuards(deactivated),  \u002F\u002F 失活的组件钩子\n      \u002F\u002F global before hooks\n      this.router.beforeHooks, \u002F\u002F 全局 beforeEach 钩子\n      \u002F\u002F in-component update hooks\n      extractUpdateHooks(updated), \u002F\u002F 在当前路由改变，但是该组件被复用时调用\n      \u002F\u002F in-config enter guards\n      activated.map(m => m.beforeEnter), \u002F\u002F 需要渲染组件 enter 守卫钩子\n      \u002F\u002F async components\n      resolveAsyncComponents(activated) \u002F\u002F 解析异步路由组件\n    )\n\n    const iterator = (hook: NavigationGuard, next) => {\n      if (this.pending !== route) { \u002F\u002F 路由不相等就不跳转路由\n        return abort(createNavigationCancelledError(current, route))\n      }\n      try {\n        hook(route, current, (to: any) => { \u002F\u002F 只有执行了钩子函数中的next，才会继续执行下一个钩子函数，否则会暂停跳转，以下逻辑是在判断 next() 中的传参\n          if (to === false) {\n            \u002F\u002F next(false) -> abort navigation, ensure current URL\n            this.ensureURL(true)\n            abort(createNavigationAbortedError(current, route))\n          } else if (isError(to)) {\n            this.ensureURL(true)\n            abort(to)\n          } else if (\n            typeof to === 'string' ||\n            (typeof to === 'object' &&\n              (typeof to.path === 'string' || typeof to.name === 'string'))\n          ) {\n            \u002F\u002F next('\u002F') or next({ path: '\u002F' }) -> redirect\n            abort(createNavigationRedirectedError(current, route))\n            if (typeof to === 'object' && to.replace) {\n              this.replace(to)\n            } else {\n              this.push(to)\n            }\n          } else {\n            \u002F\u002F confirm transition and pass on the value\n            next(to)\n          }\n        })\n      } catch (e) {\n        abort(e)\n      }\n    }\n    \u002F\u002F ...\n  }\n  \u002F\u002F ...\n}\n\n\u002F\u002F dev\u002Fsrc\u002Fhistory\u002Fhtml5.js line 10\nexport class HTML5History extends History {\n  _startLocation: string\n\n  constructor (router: Router, base: ?string) {\n    super(router, base)\n\n    this._startLocation = getLocation(this.base)\n  }\n\n  setupListeners () { \u002F\u002F 初始化\n    if (this.listeners.length > 0) {\n      return\n    }\n\n    const router = this.router\n    const expectScroll = router.options.scrollBehavior\n    const supportsScroll = supportsPushState && expectScroll\n\n    if (supportsScroll) {\n      this.listeners.push(setupScroll())\n    }\n\n    const handleRoutingEvent = () => {\n      const current = this.current\n\n      \u002F\u002F Avoiding first `popstate` event dispatched in some browsers but first\n      \u002F\u002F history route not updated since async guard at the same time.\n      const location = getLocation(this.base)\n      if (this.current === START && location === this._startLocation) {\n        return\n      }\n\n      this.transitionTo(location, route => {\n        if (supportsScroll) {\n          handleScroll(router, route, current, true)\n        }\n      })\n    }\n    window.addEventListener('popstate', handleRoutingEvent) \u002F\u002F 事件监听\n    this.listeners.push(() => {\n      window.removeEventListener('popstate', handleRoutingEvent)\n    })\n  }\n\n  go (n: number) {\n    window.history.go(n)\n  }\n\n  push (location: RawLocation, onComplete?: Function, onAbort?: Function) {\n    const { current: fromRoute } = this\n    this.transitionTo(location, route => {\n      pushState(cleanPath(this.base + route.fullPath))\n      handleScroll(this.router, route, fromRoute, false)\n      onComplete && onComplete(route)\n    }, onAbort)\n  }\n\n  replace (location: RawLocation, onComplete?: Function, onAbort?: Function) {\n    const { current: fromRoute } = this\n    this.transitionTo(location, route => {\n      replaceState(cleanPath(this.base + route.fullPath))\n      handleScroll(this.router, route, fromRoute, false)\n      onComplete && onComplete(route)\n    }, onAbort)\n  }\n\n  ensureURL (push?: boolean) {\n    if (getLocation(this.base) !== this.current.fullPath) {\n      const current = cleanPath(this.base + this.current.fullPath)\n      push ? pushState(current) : replaceState(current)\n    }\n  }\n\n  getCurrentLocation (): string {\n    return getLocation(this.base)\n  }\n}\n",[17,5132,5133,5138,5153,5158,5178,5192,5199,5204,5221,5226,5230,5234,5247,5251,5256,5261,5281,5286,5303,5331,5336,5341,5376,5380,5404,5408,5412,5417,5422,5433,5438,5442,5446,5457,5461,5475,5479,5502,5518,5530,5544,5561,5565,5582,5598,5602,5606,5621,5634,5642,5646,5660,5670,5675,5680,5684,5688,5692,5708,5724,5734,5739,5743,5747,5751,5755,5759,5764,5775,5780,5784,5791,5801,5813,5823,5828,5834,5839,5846,5873,5883,5901,5909,5913,5918,5926,5930,5944,5958,5963,5972,5987,6000,6014,6032,6045,6050,6054,6059,6072,6085,6102,6109,6114,6118,6123,6132,6139,6147,6151,6166,6171,6176,6181,6186,6212,6223,6240,6247,6252,6256,6260,6264,6268,6272,6276,6309,6322,6333,6349,6354,6359,6364,6385,6399,6415,6421,6425,6434,6450,6460,6464,6468,6480,6484,6503,6521,6527,6540,6545,6557,6567,6572,6582,6596,6600,6604,6635,6642,6647,6651,6655,6688,6693,6704,6709,6719,6724,6735,6740,6760,6765,6776,6780,6784,6813,6831,6845,6849,6856,6880,6893,6898,6912,6924,6941,6955,6962,6972,6987,7002,7030,7035,7040,7051,7071,7083,7092,7102,7107,7115,7120,7127,7131,7135,7143,7150,7154,7158,7163,7167,7171,7175,7179,7184,7199,7208,7212,7240,7248,7252,7271,7275,7279,7289,7308,7312,7316,7320,7334,7345,7359,7363,7370,7386,7390,7394,7410,7422,7426,7431,7436,7452,7479,7484,7488,7492,7508,7514,7525,7529,7533,7537,7556,7571,7586,7590,7594,7598,7615,7626,7630,7634,7666,7687,7703,7726,7742,7753,7758,7762,7766,7797,7815,7831,7850,7864,7874,7878,7882,7886,7902,7925,7948,7969,7973,7977,7981,7996,8008,8012],{"__ignoreMap":116},[208,5134,5135],{"class":210,"line":211},[208,5136,5137],{"class":214},"\u002F\u002F dev\u002Fsrc\u002Findex.js line 21\n",[208,5139,5140,5142,5145,5148,5151],{"class":210,"line":218},[208,5141,222],{"class":221},[208,5143,5144],{"class":221}," default",[208,5146,5147],{"class":221}," class",[208,5149,5150],{"class":228}," VueRouter",[208,5152,364],{"class":232},[208,5154,5155],{"class":210,"line":242},[208,5156,5157],{"class":214},"  \u002F\u002F...\n",[208,5159,5160,5163,5165,5168,5170,5173,5176],{"class":210,"line":266},[208,5161,5162],{"class":228},"  init",[208,5164,233],{"class":232},[208,5166,5167],{"class":236},"app",[208,5169,1386],{"class":221},[208,5171,5172],{"class":275}," any",[208,5174,5175],{"class":214}," \u002F* Vue component instance *\u002F",[208,5177,239],{"class":232},[208,5179,5180,5183,5185,5187,5189],{"class":210,"line":282},[208,5181,5182],{"class":232},"    process.env.",[208,5184,1286],{"class":275},[208,5186,1289],{"class":221},[208,5188,1292],{"class":563},[208,5190,5191],{"class":221}," &&\n",[208,5193,5194,5197],{"class":210,"line":289},[208,5195,5196],{"class":228},"      assert",[208,5198,2264],{"class":232},[208,5200,5201],{"class":210,"line":300},[208,5202,5203],{"class":232},"        install.installed,\n",[208,5205,5206,5209,5212,5214,5216,5219],{"class":210,"line":305},[208,5207,5208],{"class":563},"        `not installed. Make sure to call ",[208,5210,5211],{"class":275},"\\`",[208,5213,142],{"class":563},[208,5215,5211],{"class":275},[208,5217,5218],{"class":563}," `",[208,5220,4486],{"class":221},[208,5222,5223],{"class":210,"line":332},[208,5224,5225],{"class":563},"          `before creating root instance.`\n",[208,5227,5228],{"class":210,"line":337},[208,5229,4938],{"class":232},[208,5231,5232],{"class":210,"line":367},[208,5233,286],{"emptyLinePlaceholder":285},[208,5235,5236,5239,5242,5244],{"class":210,"line":381},[208,5237,5238],{"class":275},"    this",[208,5240,5241],{"class":232},".apps.",[208,5243,3565],{"class":228},[208,5245,5246],{"class":232},"(app)\n",[208,5248,5249],{"class":210,"line":418},[208,5250,286],{"emptyLinePlaceholder":285},[208,5252,5253],{"class":210,"line":427},[208,5254,5255],{"class":214},"    \u002F\u002F set up app destroyed handler\n",[208,5257,5258],{"class":210,"line":433},[208,5259,5260],{"class":214},"    \u002F\u002F https:\u002F\u002Fgithub.com\u002Fvuejs\u002Fvue-router\u002Fissues\u002F2639\n",[208,5262,5263,5266,5269,5271,5274,5277,5279],{"class":210,"line":439},[208,5264,5265],{"class":232},"    app.",[208,5267,5268],{"class":228},"$once",[208,5270,477],{"class":232},[208,5272,5273],{"class":563},"'hook:destroyed'",[208,5275,5276],{"class":232},", () ",[208,5278,361],{"class":221},[208,5280,364],{"class":232},[208,5282,5283],{"class":210,"line":444},[208,5284,5285],{"class":214},"      \u002F\u002F clean out app from this.apps array once destroyed\n",[208,5287,5288,5290,5293,5295,5297,5299,5301],{"class":210,"line":455},[208,5289,1608],{"class":221},[208,5291,5292],{"class":275}," index",[208,5294,314],{"class":221},[208,5296,516],{"class":275},[208,5298,5241],{"class":232},[208,5300,1834],{"class":228},[208,5302,5246],{"class":232},[208,5304,5305,5307,5310,5312,5314,5316,5318,5320,5322,5324,5327,5329],{"class":210,"line":467},[208,5306,470],{"class":221},[208,5308,5309],{"class":232}," (index ",[208,5311,1840],{"class":221},[208,5313,1843],{"class":221},[208,5315,1846],{"class":275},[208,5317,358],{"class":232},[208,5319,480],{"class":275},[208,5321,5241],{"class":232},[208,5323,3571],{"class":228},[208,5325,5326],{"class":232},"(index, ",[208,5328,1846],{"class":275},[208,5330,636],{"class":232},[208,5332,5333],{"class":210,"line":492},[208,5334,5335],{"class":214},"      \u002F\u002F ensure we still have a main app or null if no apps\n",[208,5337,5338],{"class":210,"line":506},[208,5339,5340],{"class":214},"      \u002F\u002F we do not release the router so it can be reused\n",[208,5342,5343,5345,5347,5349,5351,5353,5356,5358,5360,5362,5364,5367,5369,5372,5374],{"class":210,"line":522},[208,5344,470],{"class":221},[208,5346,233],{"class":232},[208,5348,480],{"class":275},[208,5350,929],{"class":232},[208,5352,257],{"class":221},[208,5354,5355],{"class":232}," app) ",[208,5357,480],{"class":275},[208,5359,929],{"class":232},[208,5361,272],{"class":221},[208,5363,516],{"class":275},[208,5365,5366],{"class":232},".apps[",[208,5368,3582],{"class":275},[208,5370,5371],{"class":232},"] ",[208,5373,608],{"class":221},[208,5375,934],{"class":275},[208,5377,5378],{"class":210,"line":548},[208,5379,286],{"emptyLinePlaceholder":285},[208,5381,5382,5384,5386,5388,5390,5393,5395,5398,5401],{"class":210,"line":574},[208,5383,470],{"class":221},[208,5385,233],{"class":232},[208,5387,1114],{"class":221},[208,5389,480],{"class":275},[208,5391,5392],{"class":232},".app) ",[208,5394,480],{"class":275},[208,5396,5397],{"class":232},".history.",[208,5399,5400],{"class":228},"teardown",[208,5402,5403],{"class":232},"()\n",[208,5405,5406],{"class":210,"line":585},[208,5407,2913],{"class":232},[208,5409,5410],{"class":210,"line":616},[208,5411,286],{"emptyLinePlaceholder":285},[208,5413,5414],{"class":210,"line":622},[208,5415,5416],{"class":214},"    \u002F\u002F main app previously initialized\n",[208,5418,5419],{"class":210,"line":639},[208,5420,5421],{"class":214},"    \u002F\u002F return as we don't need to set up new history listener\n",[208,5423,5424,5426,5428,5430],{"class":210,"line":645},[208,5425,384],{"class":221},[208,5427,233],{"class":232},[208,5429,480],{"class":275},[208,5431,5432],{"class":232},".app) {\n",[208,5434,5435],{"class":210,"line":656},[208,5436,5437],{"class":221},"      return\n",[208,5439,5440],{"class":210,"line":667},[208,5441,430],{"class":232},[208,5443,5444],{"class":210,"line":672},[208,5445,286],{"emptyLinePlaceholder":285},[208,5447,5448,5450,5452,5454],{"class":210,"line":678},[208,5449,5238],{"class":275},[208,5451,929],{"class":232},[208,5453,272],{"class":221},[208,5455,5456],{"class":232}," app\n",[208,5458,5459],{"class":210,"line":683},[208,5460,286],{"emptyLinePlaceholder":285},[208,5462,5463,5465,5468,5470,5472],{"class":210,"line":710},[208,5464,1554],{"class":221},[208,5466,5467],{"class":275}," history",[208,5469,314],{"class":221},[208,5471,516],{"class":275},[208,5473,5474],{"class":232},".history\n",[208,5476,5477],{"class":210,"line":726},[208,5478,286],{"emptyLinePlaceholder":285},[208,5480,5481,5483,5486,5489,5491,5493,5496,5498,5500],{"class":210,"line":731},[208,5482,384],{"class":221},[208,5484,5485],{"class":232}," (history ",[208,5487,5488],{"class":221},"instanceof",[208,5490,1180],{"class":228},[208,5492,4063],{"class":221},[208,5494,5495],{"class":232}," history ",[208,5497,5488],{"class":221},[208,5499,1217],{"class":228},[208,5501,239],{"class":232},[208,5503,5504,5506,5509,5511,5514,5516],{"class":210,"line":736},[208,5505,1608],{"class":221},[208,5507,5508],{"class":228}," handleInitialScroll",[208,5510,314],{"class":221},[208,5512,5513],{"class":236}," routeOrError",[208,5515,320],{"class":221},[208,5517,364],{"class":232},[208,5519,5520,5522,5525,5527],{"class":210,"line":758},[208,5521,1975],{"class":221},[208,5523,5524],{"class":275}," from",[208,5526,314],{"class":221},[208,5528,5529],{"class":232}," history.current\n",[208,5531,5532,5534,5537,5539,5541],{"class":210,"line":772},[208,5533,1975],{"class":221},[208,5535,5536],{"class":275}," expectScroll",[208,5538,314],{"class":221},[208,5540,516],{"class":275},[208,5542,5543],{"class":232},".options.scrollBehavior\n",[208,5545,5546,5548,5551,5553,5556,5558],{"class":210,"line":777},[208,5547,1975],{"class":221},[208,5549,5550],{"class":275}," supportsScroll",[208,5552,314],{"class":221},[208,5554,5555],{"class":232}," supportsPushState ",[208,5557,251],{"class":221},[208,5559,5560],{"class":232}," expectScroll\n",[208,5562,5563],{"class":210,"line":782},[208,5564,286],{"emptyLinePlaceholder":285},[208,5566,5567,5569,5572,5574,5577,5579],{"class":210,"line":801},[208,5568,2000],{"class":221},[208,5570,5571],{"class":232}," (supportsScroll ",[208,5573,251],{"class":221},[208,5575,5576],{"class":563}," 'fullPath'",[208,5578,1805],{"class":221},[208,5580,5581],{"class":232}," routeOrError) {\n",[208,5583,5584,5587,5589,5591,5594,5596],{"class":210,"line":819},[208,5585,5586],{"class":228},"          handleScroll",[208,5588,477],{"class":232},[208,5590,480],{"class":275},[208,5592,5593],{"class":232},", routeOrError, from, ",[208,5595,1304],{"class":275},[208,5597,636],{"class":232},[208,5599,5600],{"class":210,"line":824},[208,5601,1868],{"class":232},[208,5603,5604],{"class":210,"line":837},[208,5605,619],{"class":232},[208,5607,5608,5610,5613,5615,5617,5619],{"class":210,"line":843},[208,5609,1608],{"class":221},[208,5611,5612],{"class":228}," setupListeners",[208,5614,314],{"class":221},[208,5616,5513],{"class":236},[208,5618,320],{"class":221},[208,5620,364],{"class":232},[208,5622,5623,5626,5628,5631],{"class":210,"line":864},[208,5624,5625],{"class":232},"        history.",[208,5627,5093],{"class":228},[208,5629,5630],{"class":232},"() ",[208,5632,5633],{"class":214},"\u002F\u002F 初始化添加事件监听\n",[208,5635,5636,5639],{"class":210,"line":1997},[208,5637,5638],{"class":228},"        handleInitialScroll",[208,5640,5641],{"class":232},"(routeOrError)\n",[208,5643,5644],{"class":210,"line":2011},[208,5645,619],{"class":232},[208,5647,5648,5651,5654,5657],{"class":210,"line":2021},[208,5649,5650],{"class":232},"      history.",[208,5652,5653],{"class":228},"transitionTo",[208,5655,5656],{"class":232},"( ",[208,5658,5659],{"class":214},"\u002F\u002F 如果默认页，需要根据当前浏览器地址栏里的 path 或者 hash 来激活对应的路由\n",[208,5661,5662,5664,5667],{"class":210,"line":2026},[208,5663,5625],{"class":232},[208,5665,5666],{"class":228},"getCurrentLocation",[208,5668,5669],{"class":232},"(),\n",[208,5671,5672],{"class":210,"line":2031},[208,5673,5674],{"class":232},"        setupListeners,\n",[208,5676,5677],{"class":210,"line":2036},[208,5678,5679],{"class":232},"        setupListeners\n",[208,5681,5682],{"class":210,"line":2042},[208,5683,4938],{"class":232},[208,5685,5686],{"class":210,"line":2056},[208,5687,430],{"class":232},[208,5689,5690],{"class":210,"line":2061},[208,5691,286],{"emptyLinePlaceholder":285},[208,5693,5694,5697,5700,5702,5704,5706],{"class":210,"line":2066},[208,5695,5696],{"class":232},"    history.",[208,5698,5699],{"class":228},"listen",[208,5701,477],{"class":232},[208,5703,3469],{"class":236},[208,5705,320],{"class":221},[208,5707,364],{"class":232},[208,5709,5710,5712,5714,5716,5718,5720,5722],{"class":210,"line":2079},[208,5711,1169],{"class":275},[208,5713,5241],{"class":232},[208,5715,3464],{"class":228},[208,5717,477],{"class":232},[208,5719,5167],{"class":236},[208,5721,320],{"class":221},[208,5723,364],{"class":232},[208,5725,5726,5729,5731],{"class":210,"line":2092},[208,5727,5728],{"class":232},"        app._route ",[208,5730,272],{"class":221},[208,5732,5733],{"class":232}," route\n",[208,5735,5736],{"class":210,"line":2102},[208,5737,5738],{"class":232},"      })\n",[208,5740,5741],{"class":210,"line":2113},[208,5742,2913],{"class":232},[208,5744,5745],{"class":210,"line":2126},[208,5746,436],{"class":232},[208,5748,5749],{"class":210,"line":2146},[208,5750,5157],{"class":214},[208,5752,5753],{"class":210,"line":2167},[208,5754,867],{"class":232},[208,5756,5757],{"class":210,"line":2176},[208,5758,286],{"emptyLinePlaceholder":285},[208,5760,5761],{"class":210,"line":2181},[208,5762,5763],{"class":214},"\u002F\u002F dev\u002Fsrc\u002Fhistory\u002Fbase.js line 24\n",[208,5765,5766,5768,5770,5773],{"class":210,"line":2199},[208,5767,222],{"class":221},[208,5769,5147],{"class":221},[208,5771,5772],{"class":228}," History",[208,5774,364],{"class":232},[208,5776,5777],{"class":210,"line":2210},[208,5778,5779],{"class":214},"  \u002F\u002F ...\n",[208,5781,5782],{"class":210,"line":2215},[208,5783,286],{"emptyLinePlaceholder":285},[208,5785,5786,5789],{"class":210,"line":2220},[208,5787,5788],{"class":228},"  transitionTo",[208,5790,1378],{"class":232},[208,5792,5793,5795,5797,5799],{"class":210,"line":2244},[208,5794,2095],{"class":236},[208,5796,1386],{"class":221},[208,5798,1512],{"class":228},[208,5800,1515],{"class":232},[208,5802,5803,5806,5808,5811],{"class":210,"line":2259},[208,5804,5805],{"class":228},"    onComplete",[208,5807,1523],{"class":221},[208,5809,5810],{"class":228}," Function",[208,5812,1515],{"class":232},[208,5814,5815,5818,5820],{"class":210,"line":2267},[208,5816,5817],{"class":228},"    onAbort",[208,5819,1523],{"class":221},[208,5821,5822],{"class":228}," Function\n",[208,5824,5825],{"class":210,"line":2296},[208,5826,5827],{"class":232},"  ) {\n",[208,5829,5830,5832],{"class":210,"line":2302},[208,5831,370],{"class":221},[208,5833,5733],{"class":232},[208,5835,5836],{"class":210,"line":2307},[208,5837,5838],{"class":214},"    \u002F\u002F catch redirect option https:\u002F\u002Fgithub.com\u002Fvuejs\u002Fvue-router\u002Fissues\u002F3201\n",[208,5840,5841,5844],{"class":210,"line":2320},[208,5842,5843],{"class":221},"    try",[208,5845,364],{"class":232},[208,5847,5848,5851,5853,5855,5858,5860,5863,5865,5868,5870],{"class":210,"line":2325},[208,5849,5850],{"class":232},"      route ",[208,5852,272],{"class":221},[208,5854,516],{"class":275},[208,5856,5857],{"class":232},".router.",[208,5859,1352],{"class":228},[208,5861,5862],{"class":232},"(location, ",[208,5864,480],{"class":275},[208,5866,5867],{"class":232},".current) ",[208,5869,539],{"class":214},[208,5871,5872],{"class":214}," \u002F\u002F 获取匹配的路由信息\n",[208,5874,5875,5877,5880],{"class":210,"line":2330},[208,5876,1914],{"class":232},[208,5878,5879],{"class":221},"catch",[208,5881,5882],{"class":232}," (e) {\n",[208,5884,5885,5887,5890,5892,5894,5897,5899],{"class":210,"line":2348},[208,5886,1169],{"class":275},[208,5888,5889],{"class":232},".errorCbs.",[208,5891,3464],{"class":228},[208,5893,477],{"class":232},[208,5895,5896],{"class":236},"cb",[208,5898,320],{"class":221},[208,5900,364],{"class":232},[208,5902,5903,5906],{"class":210,"line":2369},[208,5904,5905],{"class":228},"        cb",[208,5907,5908],{"class":232},"(e)\n",[208,5910,5911],{"class":210,"line":2381},[208,5912,5738],{"class":232},[208,5914,5915],{"class":210,"line":2413},[208,5916,5917],{"class":214},"      \u002F\u002F Exception should still be thrown\n",[208,5919,5920,5923],{"class":210,"line":2442},[208,5921,5922],{"class":221},"      throw",[208,5924,5925],{"class":232}," e\n",[208,5927,5928],{"class":210,"line":2471},[208,5929,430],{"class":232},[208,5931,5932,5934,5937,5939,5941],{"class":210,"line":2476},[208,5933,1554],{"class":221},[208,5935,5936],{"class":275}," prev",[208,5938,314],{"class":221},[208,5940,516],{"class":275},[208,5942,5943],{"class":232},".current\n",[208,5945,5946,5948,5950,5953,5955],{"class":210,"line":2484},[208,5947,5238],{"class":275},[208,5949,696],{"class":232},[208,5951,5952],{"class":228},"confirmTransition",[208,5954,5656],{"class":232},[208,5956,5957],{"class":214},"\u002F\u002F 确认跳转\n",[208,5959,5960],{"class":210,"line":2490},[208,5961,5962],{"class":232},"      route,\n",[208,5964,5965,5968,5970],{"class":210,"line":2503},[208,5966,5967],{"class":232},"      () ",[208,5969,361],{"class":221},[208,5971,364],{"class":232},[208,5973,5974,5976,5978,5981,5984],{"class":210,"line":2518},[208,5975,495],{"class":275},[208,5977,696],{"class":232},[208,5979,5980],{"class":228},"updateRoute",[208,5982,5983],{"class":232},"(route) ",[208,5985,5986],{"class":214},"\u002F\u002F 更新当前 route 对象\n",[208,5988,5989,5992,5994,5997],{"class":210,"line":2536},[208,5990,5991],{"class":232},"        onComplete ",[208,5993,251],{"class":221},[208,5995,5996],{"class":228}," onComplete",[208,5998,5999],{"class":232},"(route)\n",[208,6001,6002,6004,6006,6009,6011],{"class":210,"line":2541},[208,6003,495],{"class":275},[208,6005,696],{"class":232},[208,6007,6008],{"class":228},"ensureURL",[208,6010,5630],{"class":232},[208,6012,6013],{"class":214},"\u002F\u002F 子类实现的更新url地址 对于 hash 模式的话 就是更新 hash 的值\n",[208,6015,6016,6018,6021,6023,6025,6028,6030],{"class":210,"line":2550},[208,6017,495],{"class":275},[208,6019,6020],{"class":232},".router.afterHooks.",[208,6022,3464],{"class":228},[208,6024,477],{"class":232},[208,6026,6027],{"class":236},"hook",[208,6029,320],{"class":221},[208,6031,364],{"class":232},[208,6033,6034,6037,6039,6042],{"class":210,"line":2561},[208,6035,6036],{"class":232},"          hook ",[208,6038,251],{"class":221},[208,6040,6041],{"class":228}," hook",[208,6043,6044],{"class":232},"(route, prev)\n",[208,6046,6047],{"class":210,"line":2567},[208,6048,6049],{"class":232},"        })\n",[208,6051,6052],{"class":210,"line":2573},[208,6053,286],{"emptyLinePlaceholder":285},[208,6055,6056],{"class":210,"line":2579},[208,6057,6058],{"class":214},"        \u002F\u002F fire ready cbs once\n",[208,6060,6061,6063,6065,6067,6069],{"class":210,"line":2585},[208,6062,2000],{"class":221},[208,6064,233],{"class":232},[208,6066,1114],{"class":221},[208,6068,480],{"class":275},[208,6070,6071],{"class":232},".ready) {\n",[208,6073,6074,6077,6080,6082],{"class":210,"line":2596},[208,6075,6076],{"class":275},"          this",[208,6078,6079],{"class":232},".ready ",[208,6081,272],{"class":221},[208,6083,6084],{"class":275}," true\n",[208,6086,6087,6089,6092,6094,6096,6098,6100],{"class":210,"line":2608},[208,6088,6076],{"class":275},[208,6090,6091],{"class":232},".readyCbs.",[208,6093,3464],{"class":228},[208,6095,477],{"class":232},[208,6097,5896],{"class":236},[208,6099,320],{"class":221},[208,6101,364],{"class":232},[208,6103,6104,6107],{"class":210,"line":2614},[208,6105,6106],{"class":228},"            cb",[208,6108,5999],{"class":232},[208,6110,6111],{"class":210,"line":2630},[208,6112,6113],{"class":232},"          })\n",[208,6115,6116],{"class":210,"line":2636},[208,6117,1868],{"class":232},[208,6119,6120],{"class":210,"line":2661},[208,6121,6122],{"class":232},"      },\n",[208,6124,6125,6128,6130],{"class":210,"line":2667},[208,6126,6127],{"class":236},"      err",[208,6129,320],{"class":221},[208,6131,364],{"class":232},[208,6133,6134,6136],{"class":210,"line":2676},[208,6135,2000],{"class":221},[208,6137,6138],{"class":232}," (onAbort) {\n",[208,6140,6141,6144],{"class":210,"line":2685},[208,6142,6143],{"class":228},"          onAbort",[208,6145,6146],{"class":232},"(err)\n",[208,6148,6149],{"class":210,"line":2691},[208,6150,1868],{"class":232},[208,6152,6153,6155,6158,6160,6162,6164],{"class":210,"line":2696},[208,6154,2000],{"class":221},[208,6156,6157],{"class":232}," (err ",[208,6159,251],{"class":221},[208,6161,1066],{"class":221},[208,6163,480],{"class":275},[208,6165,6071],{"class":232},[208,6167,6168],{"class":210,"line":2702},[208,6169,6170],{"class":214},"          \u002F\u002F Initial redirection should not mark the history as ready yet\n",[208,6172,6173],{"class":210,"line":2711},[208,6174,6175],{"class":214},"          \u002F\u002F because it's triggered by the redirection instead\n",[208,6177,6178],{"class":210,"line":2720},[208,6179,6180],{"class":214},"          \u002F\u002F https:\u002F\u002Fgithub.com\u002Fvuejs\u002Fvue-router\u002Fissues\u002F3225\n",[208,6182,6183],{"class":210,"line":2735},[208,6184,6185],{"class":214},"          \u002F\u002F https:\u002F\u002Fgithub.com\u002Fvuejs\u002Fvue-router\u002Fissues\u002F3331\n",[208,6187,6188,6190,6192,6194,6197,6200,6202,6205,6207,6210],{"class":210,"line":2764},[208,6189,1813],{"class":221},[208,6191,233],{"class":232},[208,6193,1114],{"class":221},[208,6195,6196],{"class":228},"isNavigationFailure",[208,6198,6199],{"class":232},"(err, NavigationFailureType.redirected) ",[208,6201,608],{"class":221},[208,6203,6204],{"class":232}," prev ",[208,6206,326],{"class":221},[208,6208,6209],{"class":275}," START",[208,6211,239],{"class":232},[208,6213,6214,6217,6219,6221],{"class":210,"line":2769},[208,6215,6216],{"class":275},"            this",[208,6218,6079],{"class":232},[208,6220,272],{"class":221},[208,6222,6084],{"class":275},[208,6224,6225,6227,6230,6232,6234,6236,6238],{"class":210,"line":2782},[208,6226,6216],{"class":275},[208,6228,6229],{"class":232},".readyErrorCbs.",[208,6231,3464],{"class":228},[208,6233,477],{"class":232},[208,6235,5896],{"class":236},[208,6237,320],{"class":221},[208,6239,364],{"class":232},[208,6241,6242,6245],{"class":210,"line":2787},[208,6243,6244],{"class":228},"              cb",[208,6246,6146],{"class":232},[208,6248,6249],{"class":210,"line":2792},[208,6250,6251],{"class":232},"            })\n",[208,6253,6254],{"class":210,"line":2797},[208,6255,1863],{"class":232},[208,6257,6258],{"class":210,"line":2810},[208,6259,1868],{"class":232},[208,6261,6262],{"class":210,"line":2821},[208,6263,619],{"class":232},[208,6265,6266],{"class":210,"line":2833},[208,6267,4087],{"class":232},[208,6269,6270],{"class":210,"line":2844},[208,6271,436],{"class":232},[208,6273,6274],{"class":210,"line":2855},[208,6275,286],{"emptyLinePlaceholder":285},[208,6277,6278,6281,6283,6285,6287,6289,6291,6294,6296,6298,6300,6303,6305,6307],{"class":210,"line":2880},[208,6279,6280],{"class":228},"  confirmTransition",[208,6282,233],{"class":232},[208,6284,3469],{"class":236},[208,6286,1386],{"class":221},[208,6288,1526],{"class":228},[208,6290,352],{"class":232},[208,6292,6293],{"class":228},"onComplete",[208,6295,1386],{"class":221},[208,6297,5810],{"class":228},[208,6299,352],{"class":232},[208,6301,6302],{"class":228},"onAbort",[208,6304,1523],{"class":221},[208,6306,5810],{"class":228},[208,6308,239],{"class":232},[208,6310,6311,6313,6316,6318,6320],{"class":210,"line":2894},[208,6312,1554],{"class":221},[208,6314,6315],{"class":275}," current",[208,6317,314],{"class":221},[208,6319,516],{"class":275},[208,6321,5943],{"class":232},[208,6323,6324,6326,6329,6331],{"class":210,"line":2904},[208,6325,5238],{"class":275},[208,6327,6328],{"class":232},".pending ",[208,6330,272],{"class":221},[208,6332,5733],{"class":232},[208,6334,6335,6337,6340,6342,6345,6347],{"class":210,"line":2910},[208,6336,1554],{"class":221},[208,6338,6339],{"class":228}," abort",[208,6341,314],{"class":221},[208,6343,6344],{"class":236}," err",[208,6346,320],{"class":221},[208,6348,364],{"class":232},[208,6350,6351],{"class":210,"line":2916},[208,6352,6353],{"class":214},"      \u002F\u002F changed after adding errors with\n",[208,6355,6356],{"class":210,"line":2924},[208,6357,6358],{"class":214},"      \u002F\u002F https:\u002F\u002Fgithub.com\u002Fvuejs\u002Fvue-router\u002Fpull\u002F3047 before that change,\n",[208,6360,6361],{"class":210,"line":2937},[208,6362,6363],{"class":214},"      \u002F\u002F redirect and aborted navigation would produce an err == null\n",[208,6365,6366,6368,6370,6372,6374,6377,6379,6382],{"class":210,"line":2960},[208,6367,470],{"class":221},[208,6369,233],{"class":232},[208,6371,1114],{"class":221},[208,6373,6196],{"class":228},[208,6375,6376],{"class":232},"(err) ",[208,6378,251],{"class":221},[208,6380,6381],{"class":228}," isError",[208,6383,6384],{"class":232},"(err)) {\n",[208,6386,6387,6389,6391,6393,6395,6397],{"class":210,"line":2970},[208,6388,2000],{"class":221},[208,6390,233],{"class":232},[208,6392,480],{"class":275},[208,6394,5889],{"class":232},[208,6396,1962],{"class":275},[208,6398,239],{"class":232},[208,6400,6401,6403,6405,6407,6409,6411,6413],{"class":210,"line":2980},[208,6402,6076],{"class":275},[208,6404,5889],{"class":232},[208,6406,3464],{"class":228},[208,6408,477],{"class":232},[208,6410,5896],{"class":236},[208,6412,320],{"class":221},[208,6414,364],{"class":232},[208,6416,6417,6419],{"class":210,"line":2985},[208,6418,6106],{"class":228},[208,6420,6146],{"class":232},[208,6422,6423],{"class":210,"line":2998},[208,6424,6113],{"class":232},[208,6426,6427,6430,6432],{"class":210,"line":3003},[208,6428,6429],{"class":232},"        } ",[208,6431,580],{"class":221},[208,6433,364],{"class":232},[208,6435,6436,6439,6441,6443,6445,6448],{"class":210,"line":3008},[208,6437,6438],{"class":228},"          warn",[208,6440,477],{"class":232},[208,6442,1304],{"class":275},[208,6444,352],{"class":232},[208,6446,6447],{"class":563},"'uncaught error during route navigation:'",[208,6449,636],{"class":232},[208,6451,6452,6455,6458],{"class":210,"line":3021},[208,6453,6454],{"class":232},"          console.",[208,6456,6457],{"class":228},"error",[208,6459,6146],{"class":232},[208,6461,6462],{"class":210,"line":3036},[208,6463,1868],{"class":232},[208,6465,6466],{"class":210,"line":3047},[208,6467,619],{"class":232},[208,6469,6470,6473,6475,6478],{"class":210,"line":3056},[208,6471,6472],{"class":232},"      onAbort ",[208,6474,251],{"class":221},[208,6476,6477],{"class":228}," onAbort",[208,6479,6146],{"class":232},[208,6481,6482],{"class":210,"line":3067},[208,6483,430],{"class":232},[208,6485,6486,6488,6491,6493,6496,6498,6500],{"class":210,"line":3080},[208,6487,1554],{"class":221},[208,6489,6490],{"class":275}," lastRouteIndex",[208,6492,314],{"class":221},[208,6494,6495],{"class":232}," route.matched.",[208,6497,1962],{"class":275},[208,6499,1843],{"class":221},[208,6501,6502],{"class":275}," 1\n",[208,6504,6505,6507,6510,6512,6515,6517,6519],{"class":210,"line":3095},[208,6506,1554],{"class":221},[208,6508,6509],{"class":275}," lastCurrentIndex",[208,6511,314],{"class":221},[208,6513,6514],{"class":232}," current.matched.",[208,6516,1962],{"class":275},[208,6518,1843],{"class":221},[208,6520,6502],{"class":275},[208,6522,6523,6525],{"class":210,"line":3100},[208,6524,384],{"class":221},[208,6526,1378],{"class":232},[208,6528,6529,6532,6535,6537],{"class":210,"line":3112},[208,6530,6531],{"class":228},"      isSameRoute",[208,6533,6534],{"class":232},"(route, current) ",[208,6536,251],{"class":221},[208,6538,6539],{"class":214}," \u002F\u002F 如果是相同的路由就不跳转\n",[208,6541,6542],{"class":210,"line":3122},[208,6543,6544],{"class":214},"      \u002F\u002F in the case the route map has been dynamically appended to\n",[208,6546,6547,6550,6552,6555],{"class":210,"line":3127},[208,6548,6549],{"class":232},"      lastRouteIndex ",[208,6551,257],{"class":221},[208,6553,6554],{"class":232}," lastCurrentIndex ",[208,6556,4397],{"class":221},[208,6558,6559,6562,6564],{"class":210,"line":3141},[208,6560,6561],{"class":232},"      route.matched[lastRouteIndex] ",[208,6563,257],{"class":221},[208,6565,6566],{"class":232}," current.matched[lastCurrentIndex]\n",[208,6568,6569],{"class":210,"line":3146},[208,6570,6571],{"class":232},"    ) {\n",[208,6573,6574,6576,6578,6580],{"class":210,"line":3151},[208,6575,1169],{"class":275},[208,6577,696],{"class":232},[208,6579,6008],{"class":228},[208,6581,5403],{"class":232},[208,6583,6584,6586,6588,6590,6593],{"class":210,"line":3159},[208,6585,1904],{"class":221},[208,6587,6339],{"class":228},[208,6589,477],{"class":232},[208,6591,6592],{"class":228},"createNavigationDuplicatedError",[208,6594,6595],{"class":232},"(current, route))\n",[208,6597,6598],{"class":210,"line":3165},[208,6599,430],{"class":232},[208,6601,6602],{"class":210,"line":3171},[208,6603,286],{"emptyLinePlaceholder":285},[208,6605,6606,6608,6610,6613,6615,6618,6620,6623,6625,6627,6630,6632],{"class":210,"line":3176},[208,6607,1554],{"class":221},[208,6609,1427],{"class":232},[208,6611,6612],{"class":275},"updated",[208,6614,352],{"class":232},[208,6616,6617],{"class":275},"deactivated",[208,6619,352],{"class":232},[208,6621,6622],{"class":275},"activated",[208,6624,1443],{"class":232},[208,6626,272],{"class":221},[208,6628,6629],{"class":228}," resolveQueue",[208,6631,5656],{"class":232},[208,6633,6634],{"class":214},"\u002F\u002F 通过对比路由解析出可复用的组件，需要渲染的组件，失活的组件\n",[208,6636,6637,6639],{"class":210,"line":3181},[208,6638,1169],{"class":275},[208,6640,6641],{"class":232},".current.matched,\n",[208,6643,6644],{"class":210,"line":3186},[208,6645,6646],{"class":232},"      route.matched\n",[208,6648,6649],{"class":210,"line":3192},[208,6650,4087],{"class":232},[208,6652,6653],{"class":210,"line":3203},[208,6654,286],{"emptyLinePlaceholder":285},[208,6656,6657,6659,6662,6664,6666,6668,6670,6673,6675,6677,6680,6683,6685],{"class":210,"line":3218},[208,6658,1554],{"class":221},[208,6660,6661],{"class":275}," queue",[208,6663,1386],{"class":221},[208,6665,1389],{"class":228},[208,6667,1392],{"class":232},[208,6669,2402],{"class":221},[208,6671,6672],{"class":228},"NavigationGuard",[208,6674,3354],{"class":232},[208,6676,272],{"class":221},[208,6678,6679],{"class":232}," [].",[208,6681,6682],{"class":228},"concat",[208,6684,5656],{"class":232},[208,6686,6687],{"class":214},"\u002F\u002F 导航守卫数组\n",[208,6689,6690],{"class":210,"line":3235},[208,6691,6692],{"class":214},"      \u002F\u002F in-component leave guards\n",[208,6694,6695,6698,6701],{"class":210,"line":3252},[208,6696,6697],{"class":228},"      extractLeaveGuards",[208,6699,6700],{"class":232},"(deactivated),  ",[208,6702,6703],{"class":214},"\u002F\u002F 失活的组件钩子\n",[208,6705,6706],{"class":210,"line":3269},[208,6707,6708],{"class":214},"      \u002F\u002F global before hooks\n",[208,6710,6711,6713,6716],{"class":210,"line":3278},[208,6712,1169],{"class":275},[208,6714,6715],{"class":232},".router.beforeHooks, ",[208,6717,6718],{"class":214},"\u002F\u002F 全局 beforeEach 钩子\n",[208,6720,6721],{"class":210,"line":3294},[208,6722,6723],{"class":214},"      \u002F\u002F in-component update hooks\n",[208,6725,6726,6729,6732],{"class":210,"line":3310},[208,6727,6728],{"class":228},"      extractUpdateHooks",[208,6730,6731],{"class":232},"(updated), ",[208,6733,6734],{"class":214},"\u002F\u002F 在当前路由改变，但是该组件被复用时调用\n",[208,6736,6737],{"class":210,"line":3326},[208,6738,6739],{"class":214},"      \u002F\u002F in-config enter guards\n",[208,6741,6742,6745,6747,6749,6752,6754,6757],{"class":210,"line":3332},[208,6743,6744],{"class":232},"      activated.",[208,6746,1718],{"class":228},[208,6748,477],{"class":232},[208,6750,6751],{"class":236},"m",[208,6753,320],{"class":221},[208,6755,6756],{"class":232}," m.beforeEnter), ",[208,6758,6759],{"class":214},"\u002F\u002F 需要渲染组件 enter 守卫钩子\n",[208,6761,6762],{"class":210,"line":3338},[208,6763,6764],{"class":214},"      \u002F\u002F async components\n",[208,6766,6767,6770,6773],{"class":210,"line":3370},[208,6768,6769],{"class":228},"      resolveAsyncComponents",[208,6771,6772],{"class":232},"(activated) ",[208,6774,6775],{"class":214},"\u002F\u002F 解析异步路由组件\n",[208,6777,6778],{"class":210,"line":3376},[208,6779,4087],{"class":232},[208,6781,6782],{"class":210,"line":3413},[208,6783,286],{"emptyLinePlaceholder":285},[208,6785,6786,6788,6791,6793,6795,6797,6799,6802,6804,6807,6809,6811],{"class":210,"line":3418},[208,6787,1554],{"class":221},[208,6789,6790],{"class":228}," iterator",[208,6792,314],{"class":221},[208,6794,233],{"class":232},[208,6796,6027],{"class":236},[208,6798,1386],{"class":221},[208,6800,6801],{"class":228}," NavigationGuard",[208,6803,352],{"class":232},[208,6805,6806],{"class":236},"next",[208,6808,358],{"class":232},[208,6810,361],{"class":221},[208,6812,364],{"class":232},[208,6814,6815,6817,6819,6821,6823,6825,6828],{"class":210,"line":3453},[208,6816,470],{"class":221},[208,6818,233],{"class":232},[208,6820,480],{"class":275},[208,6822,6328],{"class":232},[208,6824,326],{"class":221},[208,6826,6827],{"class":232}," route) { ",[208,6829,6830],{"class":214},"\u002F\u002F 路由不相等就不跳转路由\n",[208,6832,6833,6836,6838,6840,6843],{"class":210,"line":3458},[208,6834,6835],{"class":221},"        return",[208,6837,6339],{"class":228},[208,6839,477],{"class":232},[208,6841,6842],{"class":228},"createNavigationCancelledError",[208,6844,6595],{"class":232},[208,6846,6847],{"class":210,"line":3479},[208,6848,619],{"class":232},[208,6850,6851,6854],{"class":210,"line":3488},[208,6852,6853],{"class":221},"      try",[208,6855,364],{"class":232},[208,6857,6858,6861,6864,6867,6869,6871,6873,6875,6877],{"class":210,"line":3493},[208,6859,6860],{"class":228},"        hook",[208,6862,6863],{"class":232},"(route, current, (",[208,6865,6866],{"class":236},"to",[208,6868,1386],{"class":221},[208,6870,5172],{"class":275},[208,6872,358],{"class":232},[208,6874,361],{"class":221},[208,6876,1427],{"class":232},[208,6878,6879],{"class":214},"\u002F\u002F 只有执行了钩子函数中的next，才会继续执行下一个钩子函数，否则会暂停跳转，以下逻辑是在判断 next() 中的传参\n",[208,6881,6882,6884,6887,6889,6891],{"class":210,"line":3498},[208,6883,1813],{"class":221},[208,6885,6886],{"class":232}," (to ",[208,6888,257],{"class":221},[208,6890,1079],{"class":275},[208,6892,239],{"class":232},[208,6894,6895],{"class":210,"line":3504},[208,6896,6897],{"class":214},"            \u002F\u002F next(false) -> abort navigation, ensure current URL\n",[208,6899,6900,6902,6904,6906,6908,6910],{"class":210,"line":3544},[208,6901,6216],{"class":275},[208,6903,696],{"class":232},[208,6905,6008],{"class":228},[208,6907,477],{"class":232},[208,6909,2556],{"class":275},[208,6911,636],{"class":232},[208,6913,6914,6917,6919,6922],{"class":210,"line":3559},[208,6915,6916],{"class":228},"            abort",[208,6918,477],{"class":232},[208,6920,6921],{"class":228},"createNavigationAbortedError",[208,6923,6595],{"class":232},[208,6925,6926,6929,6931,6933,6935,6938],{"class":210,"line":3588},[208,6927,6928],{"class":232},"          } ",[208,6930,580],{"class":221},[208,6932,1919],{"class":221},[208,6934,233],{"class":232},[208,6936,6937],{"class":228},"isError",[208,6939,6940],{"class":232},"(to)) {\n",[208,6942,6943,6945,6947,6949,6951,6953],{"class":210,"line":3597},[208,6944,6216],{"class":275},[208,6946,696],{"class":232},[208,6948,6008],{"class":228},[208,6950,477],{"class":232},[208,6952,2556],{"class":275},[208,6954,636],{"class":232},[208,6956,6957,6959],{"class":210,"line":3604},[208,6958,6916],{"class":228},[208,6960,6961],{"class":232},"(to)\n",[208,6963,6964,6966,6968,6970],{"class":210,"line":3609},[208,6965,6928],{"class":232},[208,6967,580],{"class":221},[208,6969,1919],{"class":221},[208,6971,1378],{"class":232},[208,6973,6974,6977,6980,6982,6984],{"class":210,"line":3614},[208,6975,6976],{"class":221},"            typeof",[208,6978,6979],{"class":232}," to ",[208,6981,257],{"class":221},[208,6983,2194],{"class":563},[208,6985,6986],{"class":221}," ||\n",[208,6988,6989,6992,6994,6996,6998,7000],{"class":210,"line":3619},[208,6990,6991],{"class":232},"            (",[208,6993,1740],{"class":221},[208,6995,6979],{"class":232},[208,6997,257],{"class":221},[208,6999,1748],{"class":563},[208,7001,5191],{"class":221},[208,7003,7004,7007,7009,7012,7014,7016,7018,7020,7023,7025,7027],{"class":210,"line":3636},[208,7005,7006],{"class":232},"              (",[208,7008,1740],{"class":221},[208,7010,7011],{"class":232}," to.path ",[208,7013,257],{"class":221},[208,7015,2194],{"class":563},[208,7017,4063],{"class":221},[208,7019,1780],{"class":221},[208,7021,7022],{"class":232}," to.name ",[208,7024,257],{"class":221},[208,7026,2194],{"class":563},[208,7028,7029],{"class":232},"))\n",[208,7031,7032],{"class":210,"line":3642},[208,7033,7034],{"class":232},"          ) {\n",[208,7036,7037],{"class":210,"line":3655},[208,7038,7039],{"class":214},"            \u002F\u002F next('\u002F') or next({ path: '\u002F' }) -> redirect\n",[208,7041,7042,7044,7046,7049],{"class":210,"line":3661},[208,7043,6916],{"class":228},[208,7045,477],{"class":232},[208,7047,7048],{"class":228},"createNavigationRedirectedError",[208,7050,6595],{"class":232},[208,7052,7053,7056,7058,7060,7062,7064,7066,7068],{"class":210,"line":3715},[208,7054,7055],{"class":221},"            if",[208,7057,233],{"class":232},[208,7059,1740],{"class":221},[208,7061,6979],{"class":232},[208,7063,257],{"class":221},[208,7065,1748],{"class":563},[208,7067,1063],{"class":221},[208,7069,7070],{"class":232}," to.replace) {\n",[208,7072,7073,7076,7078,7081],{"class":210,"line":3720},[208,7074,7075],{"class":275},"              this",[208,7077,696],{"class":232},[208,7079,7080],{"class":228},"replace",[208,7082,6961],{"class":232},[208,7084,7085,7088,7090],{"class":210,"line":3737},[208,7086,7087],{"class":232},"            } ",[208,7089,580],{"class":221},[208,7091,364],{"class":232},[208,7093,7094,7096,7098,7100],{"class":210,"line":3783},[208,7095,7075],{"class":275},[208,7097,696],{"class":232},[208,7099,3565],{"class":228},[208,7101,6961],{"class":232},[208,7103,7104],{"class":210,"line":3810},[208,7105,7106],{"class":232},"            }\n",[208,7108,7109,7111,7113],{"class":210,"line":3815},[208,7110,6928],{"class":232},[208,7112,580],{"class":221},[208,7114,364],{"class":232},[208,7116,7117],{"class":210,"line":3820},[208,7118,7119],{"class":214},"            \u002F\u002F confirm transition and pass on the value\n",[208,7121,7122,7125],{"class":210,"line":3825},[208,7123,7124],{"class":228},"            next",[208,7126,6961],{"class":232},[208,7128,7129],{"class":210,"line":3832},[208,7130,1863],{"class":232},[208,7132,7133],{"class":210,"line":3838},[208,7134,6049],{"class":232},[208,7136,7137,7139,7141],{"class":210,"line":3844},[208,7138,577],{"class":232},[208,7140,5879],{"class":221},[208,7142,5882],{"class":232},[208,7144,7145,7148],{"class":210,"line":3850},[208,7146,7147],{"class":228},"        abort",[208,7149,5908],{"class":232},[208,7151,7152],{"class":210,"line":3855},[208,7153,619],{"class":232},[208,7155,7156],{"class":210,"line":3860},[208,7157,430],{"class":232},[208,7159,7160],{"class":210,"line":3865},[208,7161,7162],{"class":214},"    \u002F\u002F ...\n",[208,7164,7165],{"class":210,"line":3879},[208,7166,436],{"class":232},[208,7168,7169],{"class":210,"line":3894},[208,7170,5779],{"class":214},[208,7172,7173],{"class":210,"line":3909},[208,7174,867],{"class":232},[208,7176,7177],{"class":210,"line":3924},[208,7178,286],{"emptyLinePlaceholder":285},[208,7180,7181],{"class":210,"line":3937},[208,7182,7183],{"class":214},"\u002F\u002F dev\u002Fsrc\u002Fhistory\u002Fhtml5.js line 10\n",[208,7185,7186,7188,7190,7192,7195,7197],{"class":210,"line":3949},[208,7187,222],{"class":221},[208,7189,5147],{"class":221},[208,7191,1180],{"class":228},[208,7193,7194],{"class":221}," extends",[208,7196,5772],{"class":228},[208,7198,364],{"class":232},[208,7200,7201,7204,7206],{"class":210,"line":3959},[208,7202,7203],{"class":236},"  _startLocation",[208,7205,1386],{"class":221},[208,7207,2841],{"class":275},[208,7209,7210],{"class":210,"line":3964},[208,7211,286],{"emptyLinePlaceholder":285},[208,7213,7214,7217,7219,7222,7224,7227,7229,7232,7234,7236,7238],{"class":210,"line":3987},[208,7215,7216],{"class":221},"  constructor",[208,7218,233],{"class":232},[208,7220,7221],{"class":236},"router",[208,7223,1386],{"class":221},[208,7225,7226],{"class":228}," Router",[208,7228,352],{"class":232},[208,7230,7231],{"class":236},"base",[208,7233,1386],{"class":221},[208,7235,3028],{"class":221},[208,7237,3230],{"class":275},[208,7239,239],{"class":232},[208,7241,7242,7245],{"class":210,"line":4002},[208,7243,7244],{"class":275},"    super",[208,7246,7247],{"class":232},"(router, base)\n",[208,7249,7250],{"class":210,"line":4024},[208,7251,286],{"emptyLinePlaceholder":285},[208,7253,7254,7256,7259,7261,7264,7266,7268],{"class":210,"line":4031},[208,7255,5238],{"class":275},[208,7257,7258],{"class":232},"._startLocation ",[208,7260,272],{"class":221},[208,7262,7263],{"class":228}," getLocation",[208,7265,477],{"class":232},[208,7267,480],{"class":275},[208,7269,7270],{"class":232},".base)\n",[208,7272,7273],{"class":210,"line":4046},[208,7274,436],{"class":232},[208,7276,7277],{"class":210,"line":4057},[208,7278,286],{"emptyLinePlaceholder":285},[208,7280,7281,7284,7286],{"class":210,"line":4069},[208,7282,7283],{"class":228},"  setupListeners",[208,7285,461],{"class":232},[208,7287,7288],{"class":214},"\u002F\u002F 初始化\n",[208,7290,7291,7293,7295,7297,7300,7302,7304,7306],{"class":210,"line":4084},[208,7292,384],{"class":221},[208,7294,233],{"class":232},[208,7296,480],{"class":275},[208,7298,7299],{"class":232},".listeners.",[208,7301,1962],{"class":275},[208,7303,3730],{"class":221},[208,7305,1951],{"class":275},[208,7307,239],{"class":232},[208,7309,7310],{"class":210,"line":4090},[208,7311,5437],{"class":221},[208,7313,7314],{"class":210,"line":4095},[208,7315,430],{"class":232},[208,7317,7318],{"class":210,"line":4100},[208,7319,286],{"emptyLinePlaceholder":285},[208,7321,7322,7324,7327,7329,7331],{"class":210,"line":4116},[208,7323,1554],{"class":221},[208,7325,7326],{"class":275}," router",[208,7328,314],{"class":221},[208,7330,516],{"class":275},[208,7332,7333],{"class":232},".router\n",[208,7335,7336,7338,7340,7342],{"class":210,"line":4126},[208,7337,1554],{"class":221},[208,7339,5536],{"class":275},[208,7341,314],{"class":221},[208,7343,7344],{"class":232}," router.options.scrollBehavior\n",[208,7346,7347,7349,7351,7353,7355,7357],{"class":210,"line":4142},[208,7348,1554],{"class":221},[208,7350,5550],{"class":275},[208,7352,314],{"class":221},[208,7354,5555],{"class":232},[208,7356,251],{"class":221},[208,7358,5560],{"class":232},[208,7360,7361],{"class":210,"line":4147},[208,7362,286],{"emptyLinePlaceholder":285},[208,7364,7365,7367],{"class":210,"line":4166},[208,7366,384],{"class":221},[208,7368,7369],{"class":232}," (supportsScroll) {\n",[208,7371,7372,7374,7376,7378,7380,7383],{"class":210,"line":4177},[208,7373,1169],{"class":275},[208,7375,7299],{"class":232},[208,7377,3565],{"class":228},[208,7379,477],{"class":232},[208,7381,7382],{"class":228},"setupScroll",[208,7384,7385],{"class":232},"())\n",[208,7387,7388],{"class":210,"line":4182},[208,7389,430],{"class":232},[208,7391,7392],{"class":210,"line":4187},[208,7393,286],{"emptyLinePlaceholder":285},[208,7395,7396,7398,7401,7403,7406,7408],{"class":210,"line":4205},[208,7397,1554],{"class":221},[208,7399,7400],{"class":228}," handleRoutingEvent",[208,7402,314],{"class":221},[208,7404,7405],{"class":232}," () ",[208,7407,361],{"class":221},[208,7409,364],{"class":232},[208,7411,7412,7414,7416,7418,7420],{"class":210,"line":4211},[208,7413,1608],{"class":221},[208,7415,6315],{"class":275},[208,7417,314],{"class":221},[208,7419,516],{"class":275},[208,7421,5943],{"class":232},[208,7423,7424],{"class":210,"line":4223},[208,7425,286],{"emptyLinePlaceholder":285},[208,7427,7428],{"class":210,"line":4234},[208,7429,7430],{"class":214},"      \u002F\u002F Avoiding first `popstate` event dispatched in some browsers but first\n",[208,7432,7433],{"class":210,"line":4240},[208,7434,7435],{"class":214},"      \u002F\u002F history route not updated since async guard at the same time.\n",[208,7437,7438,7440,7442,7444,7446,7448,7450],{"class":210,"line":4246},[208,7439,1608],{"class":221},[208,7441,1557],{"class":275},[208,7443,314],{"class":221},[208,7445,7263],{"class":228},[208,7447,477],{"class":232},[208,7449,480],{"class":275},[208,7451,7270],{"class":232},[208,7453,7454,7456,7458,7460,7463,7465,7467,7469,7472,7474,7476],{"class":210,"line":4252},[208,7455,470],{"class":221},[208,7457,233],{"class":232},[208,7459,480],{"class":275},[208,7461,7462],{"class":232},".current ",[208,7464,257],{"class":221},[208,7466,6209],{"class":275},[208,7468,1063],{"class":221},[208,7470,7471],{"class":232}," location ",[208,7473,257],{"class":221},[208,7475,516],{"class":275},[208,7477,7478],{"class":232},"._startLocation) {\n",[208,7480,7481],{"class":210,"line":4258},[208,7482,7483],{"class":221},"        return\n",[208,7485,7486],{"class":210,"line":4264},[208,7487,619],{"class":232},[208,7489,7490],{"class":210,"line":4270},[208,7491,286],{"emptyLinePlaceholder":285},[208,7493,7494,7496,7498,7500,7502,7504,7506],{"class":210,"line":4281},[208,7495,1169],{"class":275},[208,7497,696],{"class":232},[208,7499,5653],{"class":228},[208,7501,5862],{"class":232},[208,7503,3469],{"class":236},[208,7505,320],{"class":221},[208,7507,364],{"class":232},[208,7509,7510,7512],{"class":210,"line":4287},[208,7511,2000],{"class":221},[208,7513,7369],{"class":232},[208,7515,7516,7518,7521,7523],{"class":210,"line":4298},[208,7517,5586],{"class":228},[208,7519,7520],{"class":232},"(router, route, current, ",[208,7522,2556],{"class":275},[208,7524,636],{"class":232},[208,7526,7527],{"class":210,"line":4306},[208,7528,1868],{"class":232},[208,7530,7531],{"class":210,"line":4315},[208,7532,5738],{"class":232},[208,7534,7535],{"class":210,"line":4324},[208,7536,430],{"class":232},[208,7538,7539,7542,7545,7547,7550,7553],{"class":210,"line":4333},[208,7540,7541],{"class":232},"    window.",[208,7543,7544],{"class":228},"addEventListener",[208,7546,477],{"class":232},[208,7548,7549],{"class":563},"'popstate'",[208,7551,7552],{"class":232},", handleRoutingEvent) ",[208,7554,7555],{"class":214},"\u002F\u002F 事件监听\n",[208,7557,7558,7560,7562,7564,7567,7569],{"class":210,"line":4338},[208,7559,5238],{"class":275},[208,7561,7299],{"class":232},[208,7563,3565],{"class":228},[208,7565,7566],{"class":232},"(() ",[208,7568,361],{"class":221},[208,7570,364],{"class":232},[208,7572,7573,7576,7579,7581,7583],{"class":210,"line":4343},[208,7574,7575],{"class":232},"      window.",[208,7577,7578],{"class":228},"removeEventListener",[208,7580,477],{"class":232},[208,7582,7549],{"class":563},[208,7584,7585],{"class":232},", handleRoutingEvent)\n",[208,7587,7588],{"class":210,"line":4351},[208,7589,2913],{"class":232},[208,7591,7592],{"class":210,"line":4357},[208,7593,436],{"class":232},[208,7595,7596],{"class":210,"line":4363},[208,7597,286],{"emptyLinePlaceholder":285},[208,7599,7600,7603,7605,7608,7610,7613],{"class":210,"line":4369},[208,7601,7602],{"class":228},"  go",[208,7604,233],{"class":232},[208,7606,7607],{"class":236},"n",[208,7609,1386],{"class":221},[208,7611,7612],{"class":275}," number",[208,7614,239],{"class":232},[208,7616,7617,7620,7623],{"class":210,"line":4384},[208,7618,7619],{"class":232},"    window.history.",[208,7621,7622],{"class":228},"go",[208,7624,7625],{"class":232},"(n)\n",[208,7627,7628],{"class":210,"line":4391},[208,7629,436],{"class":232},[208,7631,7632],{"class":210,"line":4400},[208,7633,286],{"emptyLinePlaceholder":285},[208,7635,7636,7639,7641,7644,7646,7648,7650,7652,7654,7656,7658,7660,7662,7664],{"class":210,"line":4411},[208,7637,7638],{"class":228},"  push",[208,7640,233],{"class":232},[208,7642,7643],{"class":236},"location",[208,7645,1386],{"class":221},[208,7647,1512],{"class":228},[208,7649,352],{"class":232},[208,7651,6293],{"class":228},[208,7653,1523],{"class":221},[208,7655,5810],{"class":228},[208,7657,352],{"class":232},[208,7659,6302],{"class":228},[208,7661,1523],{"class":221},[208,7663,5810],{"class":228},[208,7665,239],{"class":232},[208,7667,7668,7670,7672,7675,7678,7681,7683,7685],{"class":210,"line":4451},[208,7669,1554],{"class":221},[208,7671,1427],{"class":232},[208,7673,7674],{"class":236},"current",[208,7676,7677],{"class":232},": ",[208,7679,7680],{"class":275},"fromRoute",[208,7682,1443],{"class":232},[208,7684,272],{"class":221},[208,7686,503],{"class":275},[208,7688,7689,7691,7693,7695,7697,7699,7701],{"class":210,"line":4457},[208,7690,5238],{"class":275},[208,7692,696],{"class":232},[208,7694,5653],{"class":228},[208,7696,5862],{"class":232},[208,7698,3469],{"class":236},[208,7700,320],{"class":221},[208,7702,364],{"class":232},[208,7704,7705,7708,7710,7713,7715,7717,7720,7723],{"class":210,"line":4464},[208,7706,7707],{"class":228},"      pushState",[208,7709,477],{"class":232},[208,7711,7712],{"class":228},"cleanPath",[208,7714,477],{"class":232},[208,7716,480],{"class":275},[208,7718,7719],{"class":232},".base ",[208,7721,7722],{"class":221},"+",[208,7724,7725],{"class":232}," route.fullPath))\n",[208,7727,7728,7731,7733,7735,7738,7740],{"class":210,"line":4471},[208,7729,7730],{"class":228},"      handleScroll",[208,7732,477],{"class":232},[208,7734,480],{"class":275},[208,7736,7737],{"class":232},".router, route, fromRoute, ",[208,7739,1304],{"class":275},[208,7741,636],{"class":232},[208,7743,7744,7747,7749,7751],{"class":210,"line":4489},[208,7745,7746],{"class":232},"      onComplete ",[208,7748,251],{"class":221},[208,7750,5996],{"class":228},[208,7752,5999],{"class":232},[208,7754,7755],{"class":210,"line":4495},[208,7756,7757],{"class":232},"    }, onAbort)\n",[208,7759,7760],{"class":210,"line":4506},[208,7761,436],{"class":232},[208,7763,7764],{"class":210,"line":4514},[208,7765,286],{"emptyLinePlaceholder":285},[208,7767,7768,7771,7773,7775,7777,7779,7781,7783,7785,7787,7789,7791,7793,7795],{"class":210,"line":4522},[208,7769,7770],{"class":228},"  replace",[208,7772,233],{"class":232},[208,7774,7643],{"class":236},[208,7776,1386],{"class":221},[208,7778,1512],{"class":228},[208,7780,352],{"class":232},[208,7782,6293],{"class":228},[208,7784,1523],{"class":221},[208,7786,5810],{"class":228},[208,7788,352],{"class":232},[208,7790,6302],{"class":228},[208,7792,1523],{"class":221},[208,7794,5810],{"class":228},[208,7796,239],{"class":232},[208,7798,7799,7801,7803,7805,7807,7809,7811,7813],{"class":210,"line":4530},[208,7800,1554],{"class":221},[208,7802,1427],{"class":232},[208,7804,7674],{"class":236},[208,7806,7677],{"class":232},[208,7808,7680],{"class":275},[208,7810,1443],{"class":232},[208,7812,272],{"class":221},[208,7814,503],{"class":275},[208,7816,7817,7819,7821,7823,7825,7827,7829],{"class":210,"line":4536},[208,7818,5238],{"class":275},[208,7820,696],{"class":232},[208,7822,5653],{"class":228},[208,7824,5862],{"class":232},[208,7826,3469],{"class":236},[208,7828,320],{"class":221},[208,7830,364],{"class":232},[208,7832,7833,7836,7838,7840,7842,7844,7846,7848],{"class":210,"line":4541},[208,7834,7835],{"class":228},"      replaceState",[208,7837,477],{"class":232},[208,7839,7712],{"class":228},[208,7841,477],{"class":232},[208,7843,480],{"class":275},[208,7845,7719],{"class":232},[208,7847,7722],{"class":221},[208,7849,7725],{"class":232},[208,7851,7852,7854,7856,7858,7860,7862],{"class":210,"line":4546},[208,7853,7730],{"class":228},[208,7855,477],{"class":232},[208,7857,480],{"class":275},[208,7859,7737],{"class":232},[208,7861,1304],{"class":275},[208,7863,636],{"class":232},[208,7865,7866,7868,7870,7872],{"class":210,"line":4551},[208,7867,7746],{"class":232},[208,7869,251],{"class":221},[208,7871,5996],{"class":228},[208,7873,5999],{"class":232},[208,7875,7876],{"class":210,"line":4570},[208,7877,7757],{"class":232},[208,7879,7880],{"class":210,"line":4583},[208,7881,436],{"class":232},[208,7883,7884],{"class":210,"line":4611},[208,7885,286],{"emptyLinePlaceholder":285},[208,7887,7888,7891,7893,7895,7897,7900],{"class":210,"line":4618},[208,7889,7890],{"class":228},"  ensureURL",[208,7892,233],{"class":232},[208,7894,3565],{"class":236},[208,7896,1523],{"class":221},[208,7898,7899],{"class":275}," boolean",[208,7901,239],{"class":232},[208,7903,7904,7906,7908,7911,7913,7915,7918,7920,7922],{"class":210,"line":4627},[208,7905,384],{"class":221},[208,7907,233],{"class":232},[208,7909,7910],{"class":228},"getLocation",[208,7912,477],{"class":232},[208,7914,480],{"class":275},[208,7916,7917],{"class":232},".base) ",[208,7919,326],{"class":221},[208,7921,516],{"class":275},[208,7923,7924],{"class":232},".current.fullPath) {\n",[208,7926,7927,7929,7931,7933,7935,7937,7939,7941,7943,7945],{"class":210,"line":4632},[208,7928,1608],{"class":221},[208,7930,6315],{"class":275},[208,7932,314],{"class":221},[208,7934,4588],{"class":228},[208,7936,477],{"class":232},[208,7938,480],{"class":275},[208,7940,7719],{"class":232},[208,7942,7722],{"class":221},[208,7944,516],{"class":275},[208,7946,7947],{"class":232},".current.fullPath)\n",[208,7949,7950,7953,7955,7958,7961,7963,7966],{"class":210,"line":4637},[208,7951,7952],{"class":232},"      push ",[208,7954,2402],{"class":221},[208,7956,7957],{"class":228}," pushState",[208,7959,7960],{"class":232},"(current) ",[208,7962,1386],{"class":221},[208,7964,7965],{"class":228}," replaceState",[208,7967,7968],{"class":232},"(current)\n",[208,7970,7971],{"class":210,"line":4642},[208,7972,430],{"class":232},[208,7974,7975],{"class":210,"line":4657},[208,7976,436],{"class":232},[208,7978,7979],{"class":210,"line":4668},[208,7980,286],{"emptyLinePlaceholder":285},[208,7982,7983,7986,7989,7991,7994],{"class":210,"line":4679},[208,7984,7985],{"class":228},"  getCurrentLocation",[208,7987,7988],{"class":232}," ()",[208,7990,1386],{"class":221},[208,7992,7993],{"class":275}," string",[208,7995,364],{"class":232},[208,7997,7998,8000,8002,8004,8006],{"class":210,"line":4684},[208,7999,2045],{"class":221},[208,8001,7263],{"class":228},[208,8003,477],{"class":232},[208,8005,480],{"class":275},[208,8007,7270],{"class":232},[208,8009,8010],{"class":210,"line":4689},[208,8011,436],{"class":232},[208,8013,8014],{"class":210,"line":4707},[208,8015,867],{"class":232},[47,8017,8018],{"id":8018},"每日一题",[108,8020,8023],{"className":8021,"code":8022,"language":113},[111],"https:\u002F\u002Fgithub.com\u002FWindrunnerMax\u002FEveryDay\n",[17,8024,8022],{"__ignoreMap":116},[47,8026,8027],{"id":8027},"参考",[108,8029,8032],{"className":8030,"code":8031,"language":113},[111],"https:\u002F\u002Fwww.jianshu.com\u002Fp\u002F557f2ba86892\nhttps:\u002F\u002Fjuejin.im\u002Fpost\u002F6844904159678824456\nhttps:\u002F\u002Fjuejin.im\u002Fpost\u002F6844904012630720526\nhttps:\u002F\u002Fjuejin.im\u002Fpost\u002F6844904062698127367\nhttps:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FAPI\u002FHistory\u002FpushState\nhttps:\u002F\u002Fliyucang-git.github.io\u002F2019\u002F08\u002F15\u002Fvue-router%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90\u002F\nhttps:\u002F\u002Frouter.vuejs.org\u002Fzh\u002Fguide\u002Fessentials\u002Fhistory-mode.html#%E5%90%8E%E7%AB%AF%E9%85%8D%E7%BD%AE%E4%BE%8B%E5%AD%90\n",[17,8033,8031],{"__ignoreMap":116},[8035,8036,8037],"style",{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .snhLl, html code.shiki .snhLl{--shiki-default:#22863A;--shiki-default-font-weight:bold;--shiki-dark:#85E89D;--shiki-dark-font-weight:bold}",{"title":116,"searchDepth":218,"depth":218,"links":8039},[8040,8041,8042,8043],{"id":49,"depth":218,"text":49},{"id":119,"depth":218,"text":119},{"id":8018,"depth":218,"text":8018},{"id":8027,"depth":218,"text":8027},"Vue-router是Vue的核心组件，主要是作为Vue的路由管理器，Vue-router默认hash模式，通过引入Vue-router对象模块时配置mode属性可以启用history模式。","md",{},"\u002Fvue\u002Fvue路由history模式分析",{"title":5,"description":8044},"Vue\u002FVue路由History模式分析","nTrdphFhG8EH8gQg9i0zCdelEc6RwEQPiFlRtHEpHls",1791042471564]