<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
路由這個概念最早在後端出現,隨後前後端分離,直至當今的單頁面應用,路由也在一直髮生變化。本文來總結一下路由變化和vue-router中的路由模式區別相關知識點。
早期的頁面都是由html頁面在伺服器端渲染的,伺服器端直接返回給使用者端渲染好的html頁面供展示,一個頁面對應一個URL,首先向伺服器端請求對應的URL,伺服器根據此URL去匹配對應的controller,最終生成html頁面返回給使用者端。這種方法有利於SEO的優化,但是這種頁面html和資料邏輯混合在一塊,開發人員開發維護起來困難。
隨著Ajax的出現,由了前後端分離的開發方式,後端只負責邏輯處理和返回資料,前端只負責通過ajax將資料渲染到頁面。
其實SPA最主要的特點就是在前後端分離的基礎上加了一層前端路由.也就是前端來維護一套路由規則。
vue-router的作用就是通過改變URL,在不重新請求頁面的情況下,更新頁面檢視。簡單的說就是,雖然位址列的地址改變了,但是並不是一個全新的頁面,而是之前的頁面某些部分進行了修改。要想解決上面的問題,前提需要知道瀏覽器window的history物件和location物件的hash屬性(詳情見 history物件詳解),這兩個物件分別存在頁面路徑跳轉,但是頁面不重新整理的功能。
對應了location物件的hash屬性,vue-router 預設 hash 模式,使用 URL 的 hash 來模擬一個完整的 URL,於是當 URL 改變時,頁面不會重新載入。
location.hash 對應 "(#)" 後面的字串,比如:https://xxx.cn/xxx/6844904062698127367#heading 對應的值為 "#heading",後面 hash 值的變化,並不會導致瀏覽器向伺服器發出請求,瀏覽器不發出請求,也就不會重新整理頁面。另外每次 hash 值的變化,還會觸發 hashchange 這個事件,通過這個事件我們就可以知道 hash 值發生了哪些變化。然後我們便可以監聽 hashchange 來實現更新頁面部分內容的操作:比如下面的程式碼監聽一個網頁 hash 值變化
window.addEventListener('hashchange', function() { console.log('The hash has changed!') }, false);
當網頁點選返回或者前進的時候,hash值會發生變化,會觸發上面的hashchange事件並列印。
如果不想要很醜的 hash,我們可以用路由的 history 模式,這種模式充分利用 history.pushState API 來完成 URL 跳轉而無須重新載入頁面,同時還有popstate 事件來監聽state變化,這樣位址列中路徑就沒有了"#",但是當用戶使用了重新整理等操作的時候,瀏覽器會給伺服器傳送請求,為了避免這種情況出現,所以這個實現需要伺服器端的支援,需要把所有路由都重定向到根路由,這裡省略伺服器端的設定。
window.addEventListener('popstate', function() { console.log('The state has changed!') }, false);
同:hash和history都是屬於瀏覽器自身的特性,Vue-router只是利用了這兩個特性(通過呼叫瀏覽器介面)來實現前端路由。
不同:hash模式 會在瀏覽器的URL中加入'#',而HTM5History就沒有'#'號,URL和正常的URL一樣。
history比於直接修改hash主要有以下優勢:a、pushState設定的新URL可以是與當前URL同源的任意URL;而hash只可修改#後面的部分,故只可設定與當前同文件的URL;b、pushState設定的新URL可以與當前URL一模一樣,這樣也會把記錄新增到棧中;而hash設定的新值必須與原來不一樣才會觸發記錄新增到棧中;c、pushState通過stateObject可以新增任意型別的資料到記錄中;而hash只可新增短字串,且pushState可額外設定title屬性供後續使用。
要講vue-router的路由模式,首先要了解的一點就是路由是由多個URL組成的,使用不同的URL可以相應的導航到不同的位置。
如果有進行過伺服器開發或者對http協定有所瞭解就會知道,瀏覽器中對頁面的存取是無狀態的,所以我們在切換不同的頁面時都會重新進行請求。而實際使用vue和vue-router開發就會明白,在切換頁面時是沒有重新進行請求的,使用起來就好像頁面是有狀態的,這是什麼原因呢。
這其實是藉助了瀏覽器的History API來實現的,這樣可以使得頁面跳轉而不重新整理,頁面的狀態就被維持在瀏覽器中了。
vue-router中預設使用的是hash模式,也就是會出現如下的URL:,URL中帶有#號
我們可以用如下程式碼修改成history模式:
import Vue from 'vue' import Router from 'vue-router' import Main from '@/components/Main' Vue.use(Router) export default new Router({ <strong>mode: </strong><strong>'history'</strong><strong>,</strong> routes: [ { path: '/', component: Main } ] })
這樣子URL中的#號就被去除了。
實際上存在三種模式:
Hash: 使用URL的hash值來作為路由。支援所有瀏覽器。
History: 以來HTML5 History API 和伺服器設定。參考官網中HTML5 History模式
Abstract: 支援所有javascript執行模式。如果發現沒有瀏覽器的API,路由會自動強制進入這個模式。
到此這篇關於vue前端路由以及vue-router兩種模式的文章就介紹到這了,更多相關vue路由及vue-router模式內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45