如何快速入門VUE3.0:進入學習
路由的概念在軟體工程中出現,最早是在後端路由中實現的,原因是web的發展主要經歷了這樣一些階段:
早起的網站開發整個HTML頁面是由伺服器來渲染的,即伺服器直接生產渲染好對應的HTML頁面, 返回給使用者端進行展示。如圖:
優點:利於SEO優化
缺點:整個頁面由後端人員維護,HTMl程式碼以及資料對應邏輯會混合一起,編寫和維護十分糟糕。
**前端渲染:**每次請求涉及到的靜態資源都會從靜態資源伺服器獲取,這些資源包括HTML+CSS+JS,然後在前端對這些請求回來的資源進行渲染。使用者端的每一次請求,都會從靜態資源伺服器請求檔案,這個時候的後端就只是負責提供API了。
前後端分離:
單頁面(SPA)富應用階段:
安裝 Vue-Router
npm install vue-router
步驟:
建立路由需要對映的元件 【相關推薦:】
通過createRouter建立路由物件,並且傳入routes和history模式
使用app註冊路由物件(use方法)
路由使用: 通過和和
import { createRouter, createWebHashHistory } from "vue-router" import Home from "../views/Home.vue" import About from "../views/About.vue" // 建立一個路由:對映關係 const router = new createRouter({ history: createWebHashHistory(), routes: [ { path: "/", redirect: "/home" }, { path: "/home", component: Home }, { path: "/about", component: About } ] }) export default router
補充:路由的其他屬性
name屬性:記錄路由獨一無二的名稱;
meta屬性:自定義資料
router-link事實上有很多屬性可以設定:
問題:當打包構建應用時,JavaScript 包會變得非常大,影響頁面載入
解決:把不同路由對應的元件分割成不同的程式碼塊,然後當路由被存取的時候才載入對應元件。同時也可提高首屏渲染的效率。其中,Vue-Router 預設就支援動態來載入元件。因為component可以傳入一個元件,也可以接收一個函數,該函數需要放回一個Promise。import函數就是返回一個Promise
將給定匹配模式的路由對映到同一個元件。以根據自己不同的需求載入不同的路由,做到不同的實現及頁面的渲染。
動態路由的使用一般是結合角色許可權控制一起使用。
例如:有一個 User 元件,它應該對所有使用者進行渲染,但是使用者的ID是不同的。我們可以在路徑中使用一個動態欄位來實現,我們稱之為 路徑引數。接著在中實現跳轉。
獲取動態路由的值(例如上面例子中 使用者id 123),在template中,直接通過 $route.params獲取值。
對於沒有匹配到相應的路由,我們可以給使用者匹配一個固定的頁面。通過 $route.params.pathMatch獲取到傳入的引數
元件的本身也有元件需要內部切換,這個時候就可以採用巢狀路由,在第一層路由中也使用router-view來佔位之後需要渲染的元件。
{ path: "/home", component: () => import("../views/Home.vue"), children: [ { path: "/show", component: () => import("../views/component/show.vue") }, { path: "/detail", component: () => import("../views/component/detail.vue") } ] },
通過程式碼來控制頁面的跳轉
栗子:點選一個按鈕跳轉頁面
通過query的方式來傳遞引數,在介面中通過 $route.query 來獲取引數。
使用push的特點是壓入一個新的頁面,那麼在使用者點選返回時,上一個頁面還可以回退,但是如果我們希望當前頁面是一個替換 操作,那麼可以使用replace。這個時候已經不能回退了。
router 的 go 方法(指定向前(向後)跳轉幾步)
router 的back 方法 (回溯歷史,向後一步)
router 的forward 方法(歷史中前進,向前一步)
場景:根據使用者的不同許可權,註冊不同的路由
補充:路由的其他方法
刪除路由有以下三種方式:
router.hasRoute():檢查路由是否存在。
router.getRoutes():獲取一個包含所有路由記錄的陣列。
vue-router 提供的導航守衛主要用來通過跳轉或取消的方式守衛導航
全域性的前置守衛==beforeEach
==是在導航觸發時會被回撥的,它有兩個引數:
返回值:
場景:只有登入了的使用者才能看到的頁面
Vue還提供了很多的其他守衛函數,目的都是在某一個時刻給予回撥,可以更好的控制程式的流程或者功能
[導航守衛](導航守衛 | Vue Router (vuejs.org))
流程:
導航被觸發。
在失活的元件裡呼叫 beforeRouteLeave 守衛。
呼叫全域性的 beforeEach 守衛。
在重用的元件裡呼叫 beforeRouteUpdate 守衛(2.2+)。
在路由設定裡呼叫 beforeEnter。 解析非同步路由元件。
在被啟用的元件裡呼叫 beforeRouteEnter。
呼叫全域性的 beforeResolve 守衛(2.5+)。
導航被確認。
呼叫全域性的 afterEach 勾點。
觸發 DOM 更新。
呼叫 beforeRouteEnter 守衛中傳給 next 的回撥函數,建立好的元件範例會作為回撥函數的引數傳入。
更多程式設計相關知識,請存取:!!
以上就是一文深入詳解Vue路由:vue-router的詳細內容,更多請關注TW511.COM其它相關文章!