当前位置: 首页 > news >正文

北京网站建设怎么样天计算机学院网站建设

北京网站建设怎么样天,计算机学院网站建设,广西梧州,酒店手机网站模板一、vue-router路由变化侦测 1.1 上一遍文章中#xff0c;介绍了vue-router 的install 函数的内部实现#xff0c;知道了能在this中访问$router 和视图更新的机制#xff0c;文章链接终于把 vue-router 运行原理讲明白了#xff08;一#xff09;#xff01;#xff01…一、vue-router路由变化侦测 1.1 上一遍文章中介绍了vue-router 的install 函数的内部实现知道了能在this中访问$router 和视图更新的机制文章链接终于把 vue-router 运行原理讲明白了一 下面开始介绍上一遍文章遗留的疑惑点_route 属性值如何变化进行剖析 Vue.util.defineReactive(this, _route, this._router.history.current)1.2 我们找到 vue-router 源码的 src目录下的 router.js 文件 里面有一个init方法还记得我们上一遍文章中install 方法中在根组件调用了这个init 方法代码如下经过删减要完整代码请阅读源码 代码中两个重要地方history.transitionTo和history.listen init (app: any /* Vue component instance */) {const history this.historyif (history instanceof HTML5History || history instanceof HashHistory) {const handleInitialScroll routeOrError {const from history.currentconst expectScroll this.options.scrollBehaviorconst supportsScroll supportsPushState expectScrollif (supportsScroll fullPath in routeOrError) {handleScroll(this, routeOrError, from, false)}}const setupListeners routeOrError {history.setupListeners()handleInitialScroll(routeOrError)}history.transitionTo(history.getCurrentLocation(),setupListeners,setupListeners)}history.listen(route {this.apps.forEach(app {app._route route})})}1.3 history有三种值分别为HTML5History对应的是 路由的history模式 还有hash 和abstract case history:this.history new HTML5History(this, options.base)breakcase hash:this.history new HashHistory(this, options.base, this.fallback)breakcase abstract:this.history new AbstractHistory(this, options.base)breakdefault:if (process.env.NODE_ENV ! production) {assert(false, invalid mode: ${mode})}在1.2 中init 方法执行了history 的 transitionTo 方法传入了三个参数为当前路由路径和setupListeners history.transitionTo(history.getCurrentLocation(),setupListeners,setupListeners)1.4 下面我们找到transitionTo其具体位置在 src 下面的history目录的base.js 文件重点是 执行了confirmTransition 方法第二个参数是一个回调方法等异步组件准备完毕就执行其中有一个重要步骤就是执行 this.updateRoute(route) transitionTo (location: RawLocation,onComplete?: Function,onAbort?: Function) {this.confirmTransition(route,() {this.updateRoute(route)onComplete onComplete(route)this.ensureURL()this.router.afterHooks.forEach(hook {hook hook(route, prev)})},err {})}updateRoute 代码如下他会判断cb存不存在存在才执行该函数那么这个cb到底是啥 updateRoute (route: Route) {this.current routethis.cb this.cb(route)}1.5 在base.js 文件中找到一个方法如下看起来好像在哪里见过没错啦就是在执行init方法时候 // base.jslisten (cb: Function) {this.cb cb} 该方法就在 router.js 的init 方法中后于 history.transitionTo 执行因此根组件是不会执行 app._route route 这个方法 // router.js 的 init方法中执行 history.listenhistory.listen(route {this.apps.forEach(app {app._route route})})那执行这个方法有啥用呢我们在1.1 中见过一旦该值发生变化便会通知vue更新视图。那么什么时候才会执行这个方法呢 二、_route 变化时机 2,1 在 history.transitionTo 中 还有一个重要的方法 setupListeners history.transitionTo(history.getCurrentLocation(),setupListeners,setupListeners)setupListeners 代码如下 const setupListeners routeOrError {history.setupListeners()handleInitialScroll(routeOrError)}history.setupListeners() 具体位置为 html5.js 的 setupListeners 重要代码如下我们监听popstate 事件history模式下触发hash模式触发haschange window.addEventListener(popstate, handleRoutingEvent)具体解释如下 当活动历史记录条目更改时将触发popstate事件。如果被激活的历史记录条目是通过对history.pushState的调用创建的或者受到对history.replaceState的调用的影响popstate事件的state属性包含历史条目的状态对象的副本。 也就是触发 pushState或者 history.replaceState就会触发 popstate 事件然后执行 handleRoutingEvent 函数他会执行 this.transitionTo 函数也就是执行 updateRoute 函数 就是说 我们一旦执行history.pushState或者 history.replaceState 就会更新_route 的值 三、pushState或者 replaceState执行机制 3.1 我们在route的push方法中发现如下代码是不是很眼熟就是我们平时调用的 this.$router.push 代码的执行逻辑这个方法中 执行了history.push push (location: RawLocation, onComplete?: Function, onAbort?: Function) {console.log(执行push逻辑,...arguments)// $flow-disable-lineif (!onComplete !onAbort typeof Promise ! undefined) {return new Promise((resolve, reject) {this.history.push(location, resolve, reject)})} else {this.history.push(location, onComplete, onAbort)}}3.2 我们在html5.js 中找到history的push方法其中就执行 pushState push (location: RawLocation, onComplete?: Function, onAbort?: Function) {const { current: fromRoute } thisthis.transitionTo(location, route {pushState(cleanPath(this.base route.fullPath))handleScroll(this.router, route, fromRoute, false)onComplete onComplete(route)}, onAbort)}也就是说当我们调用this.$router.push 或者replace 时候就会触发 popstate 事件的监听从而触发_route 更新最后通知vue更新视图一切新的视图就会展现在我们面前啦
http://www.hkea.cn/news/14274661/

相关文章:

  • 毕节市住房和城乡建设局网站iis7搭建网站
  • 惠州外贸网站建设推广做网站大概需要几步
  • 网站seo怎么优化wordpress大前端logo
  • 江苏神禹建设有限公司网站深圳的网站建设公司哪家好
  • 汽车用品网站源码外贸企业网站优化
  • 四川省建设网站电子签章网站规划与建设需求分析
  • 上海备案证查询网站查询网站查询系统江都建设银行网站
  • 网页制作与网站建设宝典 pdf设计自己的logo
  • 正规免费发布信息网站网站被黑能查到是谁做的吗
  • 郑州好的网站建设公司哪家好广告网站建设报价
  • 怎么制作网站建设宝安官网网站建设比较好的
  • 南宁网站建设培训班宿迁莱布拉网站建设
  • 注册公司那家网站做的比较好led灯笼河网站建设
  • 开放大学门户网站建设方案百度应用市场app下载安装
  • 可视化建站源码中国建设银行网站网上业务服务范围
  • 如何做的网站手机可以用吗免费网站建设基础步骤
  • 做网站套路长沙网络工程学院
  • 城阳网站改版网站开发摊销年限
  • 做网站的公司哪家有名办公室装修案例
  • 比较好的网站开发服务商邯郸做淘宝网站
  • 行情网免费网站大全电子商务策划书模板
  • 湖州网站建设哪家好查企业免费的网站
  • 做资源网站盈利点centos6.5 wordpress
  • 高中生做那个的网站在那做网站
  • 网站中在线咨询怎么做淄博周村网站建设报价
  • 网站建设 移动端网站icp备案有效时间
  • 网站开发人员应具备什么素质新媒体宣传推广方案
  • 商务网站创建方案建设网站需要什么
  • 网站算信息化建设唐山网站定制
  • 什么网站可以在线做考教师岗位的题wordpress自媒体模版