Vue-router路由系統介紹

来源:https://www.cnblogs.com/qidaoxueyuan/archive/2020/03/28/12586801.html
-Advertisement-
Play Games

路由原理 傳統開發方式 url改變後 立刻發起請求,響應整個頁面,渲染整個頁面 SPA 錨點值改變後 不會發起請求,發起ajax請求,局部改變頁面數據 頁面不跳轉 用戶體驗更好 SPA single page application(單頁應用程式) 前端路由 錨點值監視 ajax獲取動態數據 核心點 ...


路由原理

  • 傳統開發方式 url改變後 立刻發起請求,響應整個頁面,渲染整個頁面
  • SPA 錨點值改變後 不會發起請求,發起ajax請求,局部改變頁面數據
    • 頁面不跳轉 用戶體驗更好

SPA

  • single page application(單頁應用程式)
  • 前端路由
    • 錨點值監視
    • ajax獲取動態數據
    • 核心點是錨點值
  • 前端框架 Vue/angular/react都很適合開發單頁應用

基本使用

  • vue-router
  • 其是vue的核心插件
  • 1:下載 npm i vue-router -S
  • 1.5(重要):安裝插件Vue.use(VueRouter);
  • 2:在main.js中引入vue-router對象 import VueRouter form './x.js';
  • 3:創建路由對象 var router = new VueRouter();
  • 4:配置路由規則 router.addRoutes([路由對象]);
    • 路由對象{path:'錨點值',component:要(填坑)顯示的組件}
  • 5:將配置好的路由對象交給Vue
    • 在options中傳遞-> key叫做 router
  • 6:留坑(使用組件) <router-view></router-view>
  • to<router-link to="/xxx/x">點我</router-link>
  • 幫助我們生成a標簽的href
  • 錨點值代碼維護不方便,如果需要改變錨點值名稱
    • 則需要改變 [使用次數 + 1(配置規則)] 個地方的代碼
命名路由
  • 1:給路由對象一個名稱 { name:'home',path:'/home',component:Home}
  • 2:在router-link的to屬性中描述這個規則
    • <router-link :to="{name:'home'}></router-link>"
    • 通過名稱找路由對象,獲取其path,生成自己的href
  • 大大降低維護成本,錨點值改變只用在main.js中改變path屬性即可
  • Vue.prototype.xxx = {add:fn}
  • 所有組件中,使用this.xxx就能拿到這個對象
  • 查詢字元串
    • 1:配置:to="{name:'detail',query:{id:hero.id} }"
    • 2:規則 {name:'detail',path:'/detail',component:Detail}
    • 3:獲取 this.$route.query.id
    • 4:生成 <a href="/detail?id=1">
  • path方式
    • 4:生成 <a href="/detail/1">
    • 1:配置 :to="{name:'detail',params:{id:hero.id} }"
    • 2:規則 { name:'detail',path:'/detail/:id'}
    • 3:獲取 this.$route.params.id
  • 查詢字元串配置參數
    • router-link一次
    • 獲取的時候一次
  • path方式配置參數
    • router-link一次
    • 規則配置的時候聲明位置
    • 獲取的時候一次
  • 總結書寫代碼註意事項
    • path方式需要在路由規則中聲明位置
別名

/a的別名是/b,意味著當用戶訪問/b時,URL會保持為/b,但是路由匹配則為/a,就像用戶訪問/a一樣。

{ path: '/a', component: A, alias: '/b' }
重定向
// 方式一:字元串路徑path
{ path: '/a', redirect: '/b' }
// 方式二:name
{ path: '/a', redirect: {name: 'b'} }
// 方式三:動態返回重定向目標
{ path: '/a', redirect: to => {
  // 方法接收 目標路由 作為參數;return 重定向的 字元串路徑/路徑對象 
}}

階段總結

  • vue-router使用步驟 : 1:引入 2:安裝插件 3:創建路由實例 4:配置路由規則 5:將路由對象關聯vue 6:留坑

  • router-link to="/xxx" 命名路由

      1. 在路由規則對象中 加入name屬性
      2. 在router-link中 :to="{ name:"xxx'} "
  • $route 路由信息對象,只讀對象

  • $router 路由操作對象,只寫對象

  • 下圖來自vue-router源碼在這裡插入圖片描述](https://img2020.cnblogs.com/other/1938443/202003/1938443-20200328123944385-1607390965.png)

      1. Vue.use(插件對象); // 過程中會註冊一些全局組件,及給vm或者組件對象掛在屬性

      2. 給vm及組件對象掛在的方式 : Object.defineProperty(Vue.prototype,'$router',{

        ​ get:function () {
        ​ return 自己的router對象;

        ​ }

        })

嵌套路由

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-W0wz3vwt-1577255773523)(Vue資料/12-VueJS-第3天- 動態、嵌套路由、許可權控制/12-VueJS-第3天- 插件、模塊化/4-源代碼/12-VueJS-第3天- 插件、模塊化.assets/image-20191225142652259.png)]

需要根據錨點值的改變,僅僅變化上圖中的Profile到Posts組件,即可使用嵌套路由

tu

  • 代碼思想
    • 1:router-view的細分
      • router-view第一層中,包含一個router-view
    • 2:每一個坑挖好了,要對應單獨的組件
  • 使用須知: 1:router-view包含router-view 2:路由children路由

路由守衛

它其實就是一個路由改變的事件回調函數

  • 全局路由守衛

    • 前置router.beforeEach((to, from,next) => {})
    • 後置router.afterEach((to, from) => {})
  • 路由獨享的守衛

    • const router = new VueRouter({
        routes: [
          {
            path: '/foo',
            component: Foo,
            beforeEnter: (to, from, next) =>{
              // ...
            }
          }
        ]
      })
      
  • 組件內的守衛

    • const Foo = {
        template: `...`,
        beforeRouteEnter (to, from, next) {
          // 在渲染該組件的對應路由被 confirm 前調用
          // 不!能!獲取組件實例 `this`
          // 因為當守衛執行前,組件實例還沒被創建
          // 但是,可以這樣用
            next(vm => {
              // 通過 `vm` 訪問組件實例-> 未來的組件this
                vm.msg = '數據在此';
            })
        },
        beforeRouteUpdate (to, from, next) {
      	// 觸發條件見下文
          // 可以訪問組件實例 `this`
        },
        beforeRouteLeave (to, from, next) {
          // 導航離開該組件的對應路由時調用
          // 可以訪問組件實例 `this`
        }
      }
      
    • beforeRouteUpdate的觸發條件(動態路由參數變化時)

      • 1:路由配置

      • {path:"/xxx/:id"}
        
      • 2:router-link

      • <router-link to="/xxx/1"
        
      • <router-link to="/xxx/2"
        
  • next

    • 放行next();

    • 取消本次導航(url恢覆成點擊前的)next(false)

    • 重定向

      • next('/xxx')
        // 或者
        next({name:'路由對象的name屬性'});
        
        
  • to||from

    • 該對象中的.fullPath屬性比較常用,也就是當前的url

守衛meta屬性的應用

  • 路由meta元數據 -> meta是對於路由規則是否需要驗證許可權的配置

    • 路由對象中 和name屬性同級 { meta:{ isChecked:true } }
  • 路由鉤子 -> 許可權控制的函數執行時期

    • 每次路由匹配後, 渲染組件到router-view之前

    • router.beforeEach(function(to,from,next) {  
      	// 判斷to或from的fullPath即可
      } )
      

編程導航

  • 1: 跳到指定的錨點,並顯示頁面 this.$router.push({ name:'xxx',query:{id:1},params:{name:'abc'} });
  • 2: 配置規則 {name:'xxx',path:'/xxx/:name'}
  • 3: 根據歷史記錄.前進或後退
    • this.$router.go(-1|1);
    • 1代表進一步,-1是退一步

過渡效果及緩存

我們需要在路由改變時變化頁面,ok!同時我們希望加上一些淡入淡出等效果,就可以用上transition內置組件

另外,考慮到緩存問題,就加上keep-alive組件結合使用

因此,你看到是這樣的

<transition>
  <keep-alive>
    <router-view></router-view>
  </keep-alive>
</transition>

transition及keep-alive詳情參考


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 問題 Layui在表單提交時,會有 是必選的,需要在提交的時候進行驗證。 解決方法 1. 在 中添加表單相應內容 2. 在 中進行驗證 說明 1. 的命名需要是 ,如上面例子中使用的是 。 2. 是用來獲取數據中的鍵,返回值是一個數組,數組的值為 的鍵名。 3. 用來獲取數組中符合要求的值,傳入的是 ...
  • 什麼是web前端? 大家越來越肯定前端的作用,如今也高端web前端開發人員依舊緊缺。而web前端技術說白了就是Java、CSS、HTML等“傳統”技術與Adobe AIR、Google Gears,以及概念性較強的互動式設計,藝術性較強的視覺設計。主要用來製作網站頁面。 Web前端開發工程師到目前為 ...
  • ##HttpServlet是GenericServlet 的子類 HttpServlet是GennericServlet的子類,只用於接收Http請求和響應。一般情況,web開發中,需要使用的Servlet均只需要實現該類即可,servlet.http包中定義了採用HTTP通信協議的HttpServ ...
  • 按照國際慣例,先放效果圖 index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>index</title> <style> .ball{ background:linear-gradient( ...
  • 1.1 JavaScript簡史 在web日益流行的今天,人們對客戶端腳本語言的需求也越來越高。 1995.2 就職於網景公司的Brendan Eich發佈了其開發的LiveScript,改語言同時在瀏覽器和伺服器使用。為了趕工期,在Netscape Navigator 2發佈前夕,Netscape ...
  • HTML佈局標簽,定義文檔區塊,塊級(block-level);定義 span,用來組合文檔中的行內元素。雖然我們可以使用HTML table標簽來設計出漂亮的佈局,但是table標簽是不建議作為佈局工具使用的,設計表格的目的是呈現表格化數據 - 表格不是佈局工具! ...
  • html中的標簽元素大體被分為三種不同的類型:塊狀元素、內聯元素(又叫行內元素)和內聯塊狀元素。HTML網頁基本標簽的嵌套規則:1.塊元素可以嵌套行元素2.行元素可以嵌套行元素3.行元素不可以嵌套塊元素4.文字類塊元素不可以嵌套塊元素5.容器類塊元素可以嵌套塊元素 ...
  • <ol>定義有序列表;<ul>定義無序列表;<li>定義列表項,<dl>定義列表,<dt>自定義列表項目,<dd>定義自定義列表的描述;同時列表項內部可以使用段落、換行符、圖片、鏈接以及其他列表等等 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...