中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

vue前端路由機制怎么實現

發布時間:2022-11-01 10:01:53 來源:億速云 閱讀:138 作者:iii 欄目:開發技術

這篇文章主要講解了“vue前端路由機制怎么實現”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“vue前端路由機制怎么實現”吧!

一. 前端路由

現代前端開發中最流行的頁面模型,莫過于SPA單頁應用架構。單頁面應用指的是應用只有一個主頁面,通過動態替換DOM內容并同步修改url地址,來模擬多頁應用的效果,切換頁面的功能直接由前臺腳本來完成,而不是由后端渲染完畢后前端只負責顯示。前端三駕馬車Angular,Vue,React均基于此模型來運行的。SPA能夠以模擬多頁面應用的效果,歸功于其前端路由機制。

二. 兩種實現方式

1、hash模式

這里的hash是指url尾巴后的#號及后面的字符。這里的#和css里的#是一個意思。hash也稱作錨點,本身是用來做頁面定位的,她可以使對應id的元素顯示在可是區域內。由于hash值變化不會導致瀏覽器向服務器發出請求,而且hash改變會觸發hashchange事件,瀏覽器的進后退也能對其進行控制,所以人們在 html5 的 history 出現前,基本都是使用 hash 來實現前端路由的。

改變#不觸發網頁加載

http://www.xxxx.com/index.html#location1 
// 改成
http://www.xxxx.com/index.html#location

瀏覽器不會重新向服務器請求index.html

window.location.hash = 'qq' // 設置 url 的 hash,會在當前url后加上 '#qq'
var hash = window.location.hash // '#qq' 
window.addEventListener('hashchange', function(){ 
 // 監聽hash變化,點擊瀏覽器的前進后退會觸發
})

下面我來簡單實現一個前端路由的封裝,大家能很清楚的明白vue路由的原理。

<ul>
 <li><a href="#/">index</a></li>
 <li><a href="#/item">item</a></li>
 <li><a href="#/list">list</a></li>
 </ul>
 <br>
 <br>
 <div>頭部</div>
 <h2 class='result'></h2>
 function Router() {
 // 路由儲存
 this.routes = {};
 // 當前路由
 this.currentUrl = '';
 }
 Router.prototype = {
 // 路由處理
 route: function (path, callback) {
 this.routes[path] = callback || function(){};
 },
 // 頁面刷新
 refresh: function () {
 // 當前的hash值
 this.currentUrl = location.hash.slice(1) || '/';
 // 執行hash值改變后相對應的回調函數
 this.routes[this.currentUrl]();
 },
 // 頁面初始化
 init: function () {
 // 頁面加載事件
 window.addEventListener('load', this.refresh.bind(this), false);
 // hash 值改變事件
 window.addEventListener('hashchange', this.refresh.bind(this), false);
 }
 }
 // 全局掛載
 window.Router = new Router();
 // 初始化
 window.Router.init();
 let obj = document.querySelector('.result');
 function changeConent (cnt) {
 obj.innerHTML = cnt
 }
 // 匹配路由做相應的操作
 Router.route('/', () => {
 changeConent("當前是首頁");
 })
 Router.route('/item', () => {
 changeConent('當前是item頁面');
 })
 Router.route('/list', () => {
 // ajax 的數據就可以這樣去拼接
 setTimeout(() => {
 obj.innerHTML = '<h2 style="color: red">Hello World</h2>'
 }, 1000)
 })

2、history模式

HTML5規范提供了history.pushState和history.replaceState來進行路由控制。通過這兩個方法可以改變url且不向服務器發送請求。同時不會像hash有一個#,更加的美觀。

下面先看api

window.history.pushState(state, title, url) 
// state:需要保存的數據,這個數據在觸發popstate事件時,可以在event.state里獲取
// title:標題,基本沒用,一般傳 null
// url:設定新的歷史記錄的 url。新的 url 與當前 url 的 origin 必須是一樣的,否則會拋出錯誤。url可以是絕對路徑,也可以是相對路徑。
//如 當前url是 https://www.baidu.com/a/,執行history.pushState(null, null, './qq/'),則變成 https://www.baidu.com/a/qq/,
//執行history.pushState(null, null, '/qq/'),則變成 https://www.baidu.com/qq/
window.history.replaceState(state, title, url)
// 與 pushState 基本相同,但它是修改當前歷史記錄,而 pushState 是創建新的歷史記錄
window.addEventListener("popstate", function() {
 // 監聽瀏覽器前進后退事件,pushState 與 replaceState 方法不會觸發 
 
});
window.history.back() // 后退,觸發popstate事件
window.history.forward() // 前進,觸發popstate事件
window.history.go(1) // 前進一步,-2為后退兩步,window.history.length可以查看當前歷史堆棧中頁面的數量

已經有 hash 模式了,而且 hash 能兼容到IE8, history 只能兼容到 IE10,為什么還要搞個 history 呢?

首先,hash 本來是拿來做頁面定位的,如果拿來做路由的話,原來的錨點功能就不能用了。其次,hash 的傳參是基于 url 的,如果要傳遞復雜的數據,會有體積的限制,而 history 模式不僅可以在url里放參數,還可以將數據存放在一個特定的對象中。

hash 和 history API對比

vue前端路由機制怎么實現

vue是什么

Vue是一套用于構建用戶界面的漸進式JavaScript框架,Vue與其它大型框架的區別是,使用Vue可以自底向上逐層應用,其核心庫只關注視圖層,方便與第三方庫和項目整合,且使用Vue可以采用單文件組件和Vue生態系統支持的庫開發復雜的單頁應用。

感謝各位的閱讀,以上就是“vue前端路由機制怎么實現”的內容了,經過本文的學習后,相信大家對vue前端路由機制怎么實現這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

vue
AI

嘉荫县| 沙田区| 新野县| 中阳县| 萝北县| 昔阳县| 盐津县| 齐河县| 苏尼特左旗| 吴堡县| 东阿县| 绵竹市| 太仆寺旗| 小金县| 泉州市| 崇文区| 扶绥县| 南投县| 克山县| 达孜县| 屏东县| 清流县| 新竹市| 根河市| 新邵县| 奉节县| 亚东县| 察隅县| 轮台县| 黄龙县| 新兴县| 仙游县| 棋牌| 会泽县| 万源市| 鹤峰县| 桦川县| 麦盖提县| 琼结县| 铁力市| 边坝县|