Vuejs學習筆記--router筆記(4.x版本)
阿新 • • 發佈:2022-03-13
1. 路由的監聽原理:
1.1 URL的hash(通過改變URL的hash值,讓頁面不發生重新整理)
URL的hash也就是錨點(#), 本質上是改變window.location的href屬性
我們可以通過直接賦值location.hash來改變href, 但是頁面不發生重新整理;
hash的優勢就是相容性更好,在老版IE中都可以執行,但是缺陷是有一個#,顯得不像一個真實的路徑
1.2 history介面是HTML5新增的, 它有l六種模式改變URL而不重新整理頁面
2. 版本管理
[email protected] --> 最後1位(2)一般是小bug修復,中間1位(1)一般是新增功能,第一位(3)一般是大的版本更新
3. vue-router基本使用:配置(index)--安裝(main)--展示(App)
4. 配置(index)
4.1 配置預設路徑
4.2 配置Not Found路徑
4.3 配置history模式
4.4.1 配置路由懶載入
4.4.2 打包後出現map檔案
作用:專案打包後,程式碼都是經過壓縮加密的,如果執行時報錯,輸出的錯誤資訊無法準確得知是哪裡的程式碼報錯。有了map就可以像未加密的程式碼一樣,準確的輸出是哪一行哪一列有錯。所以該檔案如果專案不需要是可以去除掉。
解決辦法:去src/config/index.js中改一個引數:
productionSourceMap:false
4.5 配置中的其他屬性(路由巢狀)
- name屬性 :路由記錄獨一無二的名稱
- meta屬性:自定義的資料
- children屬性:路由巢狀,放置子路由
4.6 動態路由的基本匹配
4.7 動態“新增”路由
4.8 動態刪除路由
4.9 導航守衛beforeEach:主要用來通過跳轉或取消的方式守衛導航
- to引數: Route物件, 即將跳轉到的Route物件
- from引數: Route物件, 從哪一個路由物件導航過來的
- 返回值問題:
- 1.false: 不進行導航
- 2.undefined或者不寫返回值: 進行預設導航
- 3.字串: 路徑, 跳轉到對應的路徑中
- 4.物件: 類似於 router.push({path: "/login", query: ....})
5 展示(App)router-link和router-view
5.1 router-link的引數
<router-link>元件支援使用者在具有路由功能的應用中點選導航。如果通過其他方式比如this.$router.push()等方式進行了路由跳轉,就不用寫<router-link>了
- to屬性:字串/物件,路由對應的元件名稱
- replace屬性:當點選時,會呼叫 router.replace(),而不是 router.push(),就沒有返回了
- active-class屬性:設定啟用a元素後應用的class,預設是router-link-active
- exact-active-class屬性:連結精準啟用時,應用於渲染的<a>的class,預設是router-link-exact-active,應用在路由巢狀的場景(路徑完全匹配時新增)
- custom屬性:表示整個元素要自定義,取消預設的a標籤,一般結合使用
- 插槽方式自定義標籤(無引數):
-
- v-slot=“props”(作用域插槽)(可傳參):
-
- props: href 跳轉的連結
- props: route物件
- props: navigate導航函式
- props: isActive 是否當前處於活躍的狀態
- props: isExactActive 是否當前處於精確的活躍狀態
5.2 問題:剛才為了讓路由元件之間能夠跳轉,我們使用了router-link標籤。如果我們不想要寫router-link呢?
解答:可以通過元件的$router屬性實現同樣的效果:
<template> <div id="app"> <button @click="homeClick">首頁</button> <button @click="aboutClick">關於</button> <router-view></router-view> </div> </template> <script> export default { name: 'App', methods: { homeClick () { // 通過程式碼的方式修改路由 vue-router // this.$router.push('/home'); this.$router.replace('/home'); }, aboutClick () { // this.$router.push('/about'); this.$router.replace('/about'); } } } </script>
5.3 router-view的增強
- v-slot=“props”
- props.Component屬性:要渲染的元件
5.4 程式設計式導航:通過程式碼的方式實現路由跳轉(optionsAPI和compositionAPI)
5.5 補充:$router 和 $route 區別
r o u t e 就是表示,當前哪個路由處於活躍狀態,這個route表示的就是哪個路由元件。
r o u t e r 是我們在router/index.js當中建立的router物件,就是路由物件。這個路由物件當中有好幾個路由。哪個路由處於活躍狀態,route就是表示哪個路由元件。
6. keep-alive使用
6.1 作用
6.1.1 可以使被包含的元件保留狀態,避免元件頻繁的被建立和銷燬
- 它們有兩個非常重要的屬性:
- include - 字串或正則表達,只有匹配的元件會被快取
- exclude - 字串或正則表示式,任何匹配的元件都不會被快取
6.2 使用
keep-alive包裹router-view時,對應所有路徑的元件都會被快取
<keep-alive exclude="Profile,User"> // exclude="Profile,User" 中間不要加空格 <router-view></router-view> </keep-alive>6.3 場景應用(返回的頁面處於離開時的路由頁面)