最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue Router初始化路由信息詳解

 更新時間:2023年11月22日 10:30:13   作者:BNTang  
這篇文章主要為大家詳細介紹了Vue Router初始化路由信息的相關(guān)知識,文中的示例代碼講解詳細,具有一定的借鑒價值,感興趣的小伙伴可以了解一下

前言

經(jīng)過上一節(jié)課的學習,我們已經(jīng)完成了提取我們想要的路由信息數(shù)據(jù)格式,提取完畢了之后,接下來我們該干什么,接下來需要做的步驟就是監(jiān)聽路由的變化,保存當前的路由。

那么就會遇到幾個問題,就是怎么監(jiān)聽,怎么保存,我們先回到 VueRouter 的官方文檔,點擊右上角的 API 參考,然后拖動到底部,在底部找到組件注入,當中的注入的屬性:

其實我們在使用 VueRouter 的時候,只要你注冊了 VueRouter 之后,他會在每一個 Vue 實例中都添加兩個屬性,一個是 ,一個是,一個是router,一個是route,這兩個屬性是什么呢?

$router

其實對應(yīng)著就是我們自定義的 NueRouter 對象。

$route

$route 其實對應(yīng)著就是一個普通的對象,這個對象就保存了當前的路由地址,等等等等一系列信息,所以為了將來能夠注入這兩個對象,我這里單獨寫一個類來存儲這兩個對象相關(guān)的信息。

代碼實現(xiàn)

class NueRouterInfo {
    constructor() {
        this.currentPath = null;
    }
}

通過這個類,我們就可以保存當前的路由地址,默認等于 null,將來路由地址發(fā)生變化的時候,我們就可以修改這個值。

定義好了這個類我們是需要使用這個類,所以我們在哪里進行使用呢,我們在 NueRouter 類中進行使用,我們在 NueRouter 類中定義一個屬性,這個屬性就是 NueRouterInfo 的實例,然后在 NueRouter 的構(gòu)造函數(shù)中進行初始化路由信息。

首先定義 NueRouterInfo 的實例:

this.routerInfo = new NueRouterInfo();

然后在 NueRouter 的構(gòu)造函數(shù)中進行初始化路由信息,我這里定義一個 initDefault 方法,然后在這個方法中進行初始化路由信息,這個方法是在 NueRouter 的構(gòu)造函數(shù)中進行調(diào)用的。

在 initDefault 方法中,首先根據(jù)當前的 mode 也就是路由模式來進行走不同分支的邏輯代碼,如果是 hash 模式,那么我們就需要監(jiān)聽 hashchange 事件,如果是 history 模式,那么我們就需要監(jiān)聽 popstate 事件。

這是其中的一步,我們的第一步其實并不是監(jiān)聽,首先要處理的就是,打開的界面先判斷 mode 模式如果是 hash,看看界面有沒有 hash,如果沒有就跳轉(zhuǎn)到 #/,如果有就不用管了,如果是 history 模式,那么就看看界面有沒有 history,如果沒有就跳轉(zhuǎn)到 /,如果有就不用管了。

第二步才是監(jiān)聽,監(jiān)聽的時候,我們需要將當前的路由地址保存到 NueRouterInfo 的實例中,好了,我們來看看代碼怎么寫。

initDefault() {
    if (this.mode === 'hash') {
        // 1.判斷打開的界面有沒有hash, 如果沒有就跳轉(zhuǎn)到#/
        if (!location.hash) {
            location.hash = '/';
        }
        // 2.加載完成之后和hash發(fā)生變化之后都需要保存當前的地址
        window.addEventListener('load', () => {
            this.routerInfo.currentPath = location.hash.slice(1);
        });
        window.addEventListener('hashchange', () => {
            this.routerInfo.currentPath = location.hash.slice(1);
            console.log(this.routerInfo);
        });
    } else {
        // 1.判斷打開的界面有沒有路徑, 如果沒有就跳轉(zhuǎn)到/
        if (!location.pathname) {
            location.pathname = '/';
        }
        // 2.加載完成之后和history發(fā)生變化之后都需要保存當前的地址
        window.addEventListener('load', () => {
            this.routerInfo.currentPath = location.pathname;
        });
        window.addEventListener('popstate', () => {
            this.routerInfo.currentPath = location.pathname;
            console.log(this.routerInfo);
        });
    }
}

測試

代碼寫完了,我們來測試一下,先在 app.vue 中定義兩個 a 標簽 href 是 hash 模式代碼如下:

<template>
  <div id="app">
    <a href="#/home" rel="external nofollow" >首頁</a>
    <a href="#/about" rel="external nofollow" >關(guān)于</a>
  </div>
</template>
<style>
</style>

然后在更改一下 NueRouter 的傳參,將 mode 改成 hash 模式, 我們來測試第一步我們處理的邏輯,打開界面,看看有沒有 hash,如果沒有就跳轉(zhuǎn)到 #/,如果有就不用管了。

首先訪問:http://localhost:8080/ ,然后我們看看界面的地址欄,發(fā)現(xiàn)沒有 hash,默認就會跳轉(zhuǎn)到 #/:

然后我們再訪問:http://localhost:8080/#/home ,然后我們看看界面的地址欄,發(fā)現(xiàn)有 hash,就不用管了:

接下來我們測試第二步,監(jiān)聽 hashchange 事件,我們在 hashchange 事件中打印了 NueRouterInfo 的實例,看看有沒有保存當前的路由地址,我們分別點擊首頁和關(guān)于,打印結(jié)果如下:

好了,hash 模式的測試就完成了,關(guān)于 history 模式需要編寫的代碼比較多,我這里就不帶著大家一起來驗證了,因為他們兩個都是同一個世界同一個夢想的。

到此為止,我們就完成了初始化路由信息的代碼編寫,接下來我們下一篇的內(nèi)容就是根據(jù)當前的路由地址,找到對應(yīng)的組件,然后渲染到頁面上。

到此這篇關(guān)于Vue Router初始化路由信息詳解的文章就介紹到這了,更多相關(guān)Vue Router內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue中$attrs和$listeners詳解以及使用方法

    Vue中$attrs和$listeners詳解以及使用方法

    最近在研究Vue的組件庫,之前也用過$attrs和$listeners,官方文檔描述的不太詳細,也沒有太好的例子,下面這篇文章主要給大家介紹了關(guān)于Vue中$attrs和$listeners詳解以及使用的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • Vue項目中使用setTimeout存在的潛在問題及解決

    Vue項目中使用setTimeout存在的潛在問題及解決

    這篇文章主要介紹了Vue項目中使用setTimeout存在的潛在問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • 關(guān)于Vite項目打包后瀏覽器兼容性問題的解決方案

    關(guān)于Vite項目打包后瀏覽器兼容性問題的解決方案

    本文主要介紹了關(guān)于Vite項目打包后瀏覽器兼容性問題的解決方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • vue通過vue-lazyload實現(xiàn)圖片懶加載的代碼詳解

    vue通過vue-lazyload實現(xiàn)圖片懶加載的代碼詳解

    這篇文章主要給大家介紹了vue通過vue-lazyload實現(xiàn)圖片懶加載,文中通過代碼示例給大家介紹的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2024-02-02
  • vue路由緩存的幾種實現(xiàn)方式小結(jié)

    vue路由緩存的幾種實現(xiàn)方式小結(jié)

    這篇文章主要介紹了vue路由緩存的幾種實現(xiàn)方式,結(jié)合實例形式詳細分析了vue.js路由緩存常見實現(xiàn)方式、使用技巧與操作注意事項,需要的朋友可以參考下
    2020-02-02
  • Vue+Openlayer批量設(shè)置閃爍點的實現(xiàn)代碼(基于postrender機制)

    Vue+Openlayer批量設(shè)置閃爍點的實現(xiàn)代碼(基于postrender機制)

    本篇文章給大家介紹基于postrender機制使用Vue+Openlayer批量設(shè)置閃爍點的實現(xiàn)代碼,代碼簡單易懂,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2021-09-09
  • 解決vue-cli腳手架打包后vendor文件過大的問題

    解決vue-cli腳手架打包后vendor文件過大的問題

    今天小編就為大家分享一篇解決vue-cli腳手架打包后vendor文件過大的問題。具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • vue3?ref獲取組件實例詳細圖文教程

    vue3?ref獲取組件實例詳細圖文教程

    在Vue3中可以使用ref函數(shù)來創(chuàng)建一個響應(yīng)式的變量,通過將ref函數(shù)應(yīng)用于一個組件實例,我們可以獲取到該組件的實例對象,這篇文章主要給大家介紹了關(guān)于vue3?ref獲取組件實例的詳細圖文教程,需要的朋友可以參考下
    2023-10-10
  • vue打包上傳服務(wù)器刷新404問題的兩種方案

    vue打包上傳服務(wù)器刷新404問題的兩種方案

    這篇文章主要給大家介紹了關(guān)于vue打包上傳服務(wù)器刷新404問題的兩種方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • 詳解vuex之store源碼簡單解析

    詳解vuex之store源碼簡單解析

    這篇文章主要介紹了詳解vuex之store源碼簡單解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-06-06

最新評論

周宁县| 布尔津县| 泸定县| 景宁| 鸡东县| 开平市| 承德市| 漳浦县| 渝北区| 故城县| 景宁| 新竹市| 定襄县| 博乐市| 吴川市| 垦利县| 容城县| 巨鹿县| 祁东县| 新民市| 利津县| 芷江| 高要市| 工布江达县| 泾源县| 文安县| 四子王旗| 尚义县| 奉节县| 吴旗县| 凤庆县| 松桃| 三台县| 尖扎县| 吉水县| 富顺县| 平利县| 宜黄县| 定南县| 岗巴县| 积石山|