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

資訊專欄INFORMATION COLUMN

前端路由簡介以及vue-router實現原理

tuomao / 2487人閱讀

摘要:后端路由簡介路由這個概念最先是后端出現的。前端路由模式隨著的流行,異步數據請求交互運行在不刷新瀏覽器的情況下進行。通過這些就能用另一種方式來實現前端路由了,但原理都是跟實現相同的。

后端路由簡介

路由這個概念最先是后端出現的。在以前用模板引擎開發頁面時,經常會看到這樣

http://www.xxx.com/login

大致流程可以看成這樣:

瀏覽器發出請求

服務器監聽到80端口(或443)有請求過來,并解析url路徑

根據服務器的路由配置,返回相應信息(可以是 html 字串,也可以是 json 數據,圖片等)

瀏覽器根據數據包的 Content-Type 來決定如何解析數據

簡單來說路由就是用來跟后端服務器進行交互的一種方式,通過不同的路徑,來請求不同的資源,請求不同的頁面是路由的其中一種功能。

前端路由 1. hash 模式

隨著 ajax 的流行,異步數據請求交互運行在不刷新瀏覽器的情況下進行。而異步交互體驗的更高級版本就是 SPA —— 單頁應用。單頁應用不僅僅是在頁面交互是無刷新的,連頁面跳轉都是無刷新的,為了實現單頁應用,所以就有了前端路由。
類似于服務端路由,前端路由實現起來其實也很簡單,就是匹配不同的 url 路徑,進行解析,然后動態的渲染出區域 html 內容。但是這樣存在一個問題,就是 url 每次變化的時候,都會造成頁面的刷新。那解決問題的思路便是在改變 url 的情況下,保證頁面的不刷新。在 2014 年之前,大家是通過 hash 來實現路由,url hash 就是類似于:

http://www.xxx.com/#/login

這種 #。后面 hash 值的變化,并不會導致瀏覽器向服務器發出請求,瀏覽器不發出請求,也就不會刷新頁面。另外每次 hash 值的變化,還會觸發hashchange 這個事件,通過這個事件我們就可以知道 hash 值發生了哪些變化。然后我們便可以監聽hashchange來實現更新頁面部分內容的操作:

function matchAndUpdate () {
   // todo 匹配 hash 做 dom 更新操作
}

window.addEventListener("hashchange", matchAndUpdate)
2. history 模式

14年后,因為HTML5標準發布。多了兩個 API,pushStatereplaceState,通過這兩個 API 可以改變 url 地址且不會發送請求。同時還有 popstate 事件。通過這些就能用另一種方式來實現前端路由了,但原理都是跟 hash 實現相同的。用了 HTML5 的實現,單頁路由的 url 就不會多出一個#,變得更加美觀。但因為沒有 # 號,所以當用戶刷新頁面之類的操作時,瀏覽器還是會給服務器發送請求。為了避免出現這種情況,所以這個實現需要服務器的支持,需要把所有路由都重定向到根頁面。

function matchAndUpdate () {
   // todo 匹配路徑 做 dom 更新操作
}

window.addEventListener("popstate", matchAndUpdate)
Vue router 實現

我們來看一下vue-router是如何定義的:

import VueRouter from "vue-router"
Vue.use(VueRouter)

const router = new VueRouter({
  mode: "history",
  routes: [...]
})

new Vue({
  router
  ...
})

可以看出來vue-router是通過 Vue.use的方法被注入進 Vue 實例中,在使用的時候我們需要全局用到 vue-routerrouter-viewrouter-link組件,以及this.$router/$route這樣的實例對象。那么是如何實現這些操作的呢?下面我會分幾個章節詳細的帶你進入vue-router的世界。(閱讀源碼是有點枯燥,但是帶著問題去了解,就感覺很有意思。如果你對 vue-router 的實現機制也存在一些疑問,可以一起探討交流)

vue-router 實現 -- install

vue-router 實現 -- new VueRouter(options)

vue-router 實現 -- HashHistory

未完待續...

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/107879.html

相關文章

  • 【Vue.js 牛刀小試】:第十二章 - 使用 Vue Router 實現 Vue 中的前端路由控制

    摘要:而路由則是使用了中新增的事件和事件。總結這一章主要是介紹了如何使用在中構建我們的前端路由。 系列目錄地址 一、基礎知識概覽 第一章 - 一些基礎概念(posted at 2018-10-31) 第二章 - 常見的指令的使用(posted at 2018-11-01) 第三章 - 事件修飾符的使用(posted at 2018-11-02) 第四章 - 頁面元素樣式的設定(posted a...

    cpupro 評論0 收藏0
  • Vue scrollBehavior 滾動行為,實現后退頁面顯示在上次瀏覽的位置

    摘要:注意這個功能只在支持的瀏覽器中可用。官方文檔簡介滾動行為使用方法期望滾動到哪個的位置或者集成模式寫法期望滾動到哪個的位置方法接收和路由對象。 前提:之前寫過關于keep-Alive組件,來實現在列表頁進入詳情頁后,后退,返回列表,顯示上次訪問的位置(原理就是緩存列表頁數據來實現),目前發現另外一個問題,就是如果后臺操作改變數據的狀態,緩存的辦法就會導致數據更新不及時導致一些頁面錯誤(例...

    BaronZhang 評論0 收藏0
  • 來一打前端博客壓壓驚

    前言 本文所有內容全部發布再個人博客主頁 https://github.com/muwoo/blogs歡迎訂閱。不過最近因為事情比較多,有一段時間沒有更新了,后面打算繼續不斷學習更新,歡迎小伙伴一起溝通交流~ 最近更新 前端單測的那些事 基于virtual dom 的canvas渲染 js Event loop 機制簡介 axios 核心源碼實現原理 JS 數據類型、賦值、深拷貝和淺拷貝 j...

    wangbinke 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<