国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

學(xué)習(xí)前端路由和vue-router筆記

李文鵬 / 1427人閱讀

摘要:前端路由原理本質(zhì)就是監(jiān)聽(tīng)的變化,然后匹配路由規(guī)則,顯示相應(yīng)的頁(yè)面,并且無(wú)須刷新。目前單頁(yè)面使用的路由就只有兩種實(shí)現(xiàn)方式就是,當(dāng)后面的哈希值發(fā)生變化時(shí),不會(huì)向服務(wù)器請(qǐng)求數(shù)據(jù),可以通過(guò)事件來(lái)監(jiān)聽(tīng)到的變化,從而進(jìn)行跳轉(zhuǎn)頁(yè)面。

前端路由原理本質(zhì)就是監(jiān)聽(tīng) URL 的變化,然后匹配路由規(guī)則,顯示相應(yīng)的頁(yè)面,并且無(wú)須刷新。目前單頁(yè)面使用的路由就只有兩種實(shí)現(xiàn)方式

hash

history

www.test.com/##/ 就是 Hash URL,當(dāng) ## 后面的哈希值發(fā)生變化時(shí),不會(huì)向服務(wù)器請(qǐng)求數(shù)據(jù),可以通過(guò) hashchange 事件來(lái)監(jiān)聽(tīng)到 URL 的變化,從而進(jìn)行跳轉(zhuǎn)頁(yè)面。

vue-router hash實(shí)現(xiàn)源碼(完整源碼訪問(wèn)https://github.com/vuejs/vue-...):

/**
 * 添加 url hash 變化的監(jiān)聽(tīng)器
 */
setupListeners () {
  const router = this.router

  /**
   * 每當(dāng) hash 變化時(shí)就解析路徑
   * 匹配路由
   */
  window.addEventListener("hashchange", () => {
    const current = this.current
    /**
     * transitionTo: 
     * 匹配路由
     * 并通過(guò)路由配置,把新的頁(yè)面 render 到 ui-view 的節(jié)點(diǎn)
     */
    this.transitionTo(getHash(), route => {
      replaceHash(route.fullPath)
    })
  })
}

檢測(cè)到 hash 的變化后,就可以通過(guò)替換 DOM 的方式來(lái)實(shí)現(xiàn)頁(yè)面的更換。

History 模式是 HTML5 新推出的功能,比之 Hash URL 更加美觀

兩個(gè) APIpushStatereplaceState可以改變 url 地址且不會(huì)發(fā)送請(qǐng)求,還有onpopState事件。但因?yàn)闆](méi)有 # 號(hào),所以當(dāng)用戶刷新頁(yè)面之類的操作時(shí),瀏覽器還是會(huì)給服務(wù)器發(fā)送請(qǐng)求。為了避免出現(xiàn)這種情況,所以這個(gè)實(shí)現(xiàn)需要服務(wù)器的支持,需要把所有路由都重定向到根頁(yè)面。具體可以訪問(wèn)官網(wǎng):https://router.vuejs.org/zh/g...

vue-router history實(shí)現(xiàn)源碼(完整源碼訪問(wèn)https://github.com/vuejs/vue-...)

export class HTML5History extends History {
  constructor (router, base) {
    super(router, base)
    /**
     * 原理還是跟 hash 實(shí)現(xiàn)一樣
     * 通過(guò)監(jiān)聽(tīng) popstate 事件
     * 匹配路由,然后更新頁(yè)面 DOM
     */
    window.addEventListener("popstate", e => {
      const current = this.current

      // Avoiding first `popstate` event dispatched in some browsers but first
      // history route not updated since async guard at the same time.
      const location = getLocation(this.base)
      if (this.current === START && location === initLocation) {
        return
      }

      this.transitionTo(location, route => {
        if (supportsScroll) {
          handleScroll(router, route, current, true)
        }
      })
    })
  }

  go (n) {
    window.history.go(n)
  }

  push (location, onComplete, onAbort) {
    const { current: fromRoute } = this
    this.transitionTo(location, route => {
      // 使用 pushState 更新 url,不會(huì)導(dǎo)致瀏覽器發(fā)送請(qǐng)求,從而不會(huì)刷新頁(yè)面
      pushState(cleanPath(this.base + route.fullPath))
      onComplete && onComplete(route)
    }, onAbort)
  }

  replace (location, onComplete, onAbort) {
    const { current: fromRoute } = this
    this.transitionTo(location, route => {
      // replaceState 跟 pushState 的區(qū)別在于,不會(huì)記錄到歷史棧
      replaceState(cleanPath(this.base + route.fullPath))
      onComplete && onComplete(route)
    }, onAbort)
  }
}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/101507.html

相關(guān)文章

  • vue學(xué)習(xí)筆記(四)

    摘要:提供了兩種向組件傳遞參數(shù)的方式。子路由項(xiàng)路徑不要使用開頭,以開頭的嵌套路徑會(huì)被當(dāng)作根路徑。路由實(shí)例的方法這里學(xué)習(xí)兩個(gè)路由實(shí)例的方法和。實(shí)際上,是通過(guò)不同的將這些資源加載后打包,然后輸出打包后文件。 一、vue-router 1、簡(jiǎn)介 我們經(jīng)常使用vue開發(fā)單頁(yè)面應(yīng)用程序(SPA)。在開發(fā)SPA過(guò)程中,路由是必不可少的部分,vue的官方推薦是vue-router。單頁(yè)面應(yīng)用程序看起來(lái)好像...

    frank_fun 評(píng)論0 收藏0
  • vue學(xué)習(xí)筆記(四)

    摘要:提供了兩種向組件傳遞參數(shù)的方式。子路由項(xiàng)路徑不要使用開頭,以開頭的嵌套路徑會(huì)被當(dāng)作根路徑。路由實(shí)例的方法這里學(xué)習(xí)兩個(gè)路由實(shí)例的方法和。實(shí)際上,是通過(guò)不同的將這些資源加載后打包,然后輸出打包后文件。 一、vue-router 1、簡(jiǎn)介 我們經(jīng)常使用vue開發(fā)單頁(yè)面應(yīng)用程序(SPA)。在開發(fā)SPA過(guò)程中,路由是必不可少的部分,vue的官方推薦是vue-router。單頁(yè)面應(yīng)用程序看起來(lái)好像...

    lwx12525 評(píng)論0 收藏0
  • vue學(xué)習(xí)筆記4

    摘要:主要當(dāng)作屬性來(lái)使用方法表示一個(gè)具體的操作,主要書寫業(yè)務(wù)邏輯一個(gè)對(duì)象,鍵是需要觀察的表達(dá)式,值是對(duì)應(yīng)回調(diào)函數(shù)。父組件向子組件傳值 組件實(shí)例定義方式,注意:一定要使用props屬性來(lái)定義父組件傳遞過(guò)來(lái)的數(shù)據(jù) // 創(chuàng)建 Vue 實(shí)例,得到 ViewModel var vm = new Vue({ el: '#app', data: {...

    番茄西紅柿 評(píng)論0 收藏0
  • 關(guān)于Vue2一些值得推薦的文章 -- 五、六月份

    摘要:五六月份推薦集合查看最新的請(qǐng)點(diǎn)擊集前端最近很火的框架資源定時(shí)更新,歡迎一下。蘇幕遮燎沈香宋周邦彥燎沈香,消溽暑。鳥雀呼晴,侵曉窺檐語(yǔ)。葉上初陽(yáng)乾宿雨,水面清圓,一一風(fēng)荷舉。家住吳門,久作長(zhǎng)安旅。五月漁郎相憶否。小楫輕舟,夢(mèng)入芙蓉浦。 五、六月份推薦集合 查看github最新的Vue weekly;請(qǐng)::點(diǎn)擊::集web前端最近很火的vue2框架資源;定時(shí)更新,歡迎 Star 一下。 蘇...

    sutaking 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<