Vue3+ts(day06:路由)

學習源碼可以看我的個人前端學習筆記 (github.com):qdxzw/frontlearningNotes

覺得有幫助的同學,可以點心心支持一下哈(筆記是根據b站上學習的尚硅谷的前端視頻【張天禹老師】,記錄一下學習筆記,用于自己復盤,有需要學習的可以去b站學習原版視頻)

路由

一、對路由的理解

二、基本切換效果

  • Vue3中要使用vue-router的最新版本,目前是4版本。
  • 路由配置文件代碼如下:
import { createRouter, createWebHistory } from "vue-router";
import Home from "../pages/Home.vue";
import News from "../pages/News.vue";
import About from "../pages/About.vue";const router = createRouter({history: createWebHistory(),routes: [{path: "/home",component: Home,},{path: "/news",component: News,},{path: "/about",component: About,},],
});
export default router;
  • main.ts代碼如下:
// 引入createApp用于創建應用(買個盆)
import { createApp } from "vue";
import router from "./router/index";
// 引入App根組件(買個根)
import App from "./App.vue";
const app = createApp(App);
app.use(router);
app.mount("#app");
  • App.vue代碼如下
<template><div class="app"><h2 class="title">Vue路由測試</h2><!-- 導航區 --><div class="navigate"><RouterLink to="/home" active-class="active"><span>首頁</span></RouterLink><RouterLink to="/news" active-class="active"><span>新聞</span></RouterLink><RouterLink to="/about" active-class="active"><span>關于</span></RouterLink></div><!-- 展示區 --><div class="main-content"><RouterView></RouterView></div></div>
</template><script lang="ts" setup name="App">
import { RouterLink, RouterView } from 'vue-router'
</script><style scoped>
.title {text-align: center;
}
.navigate {width: 500px;text-align: center;margin: 0 auto;
}
.navigate span {display: inline-block;margin-right: 50px;width: 100px;height: 50px;line-height: 50px;background-color: blanchedalmond;text-decoration: none;/* color: ; */
}
.main-content {margin: 20px auto;text-align: center;width: 500px;height: 200px;border: 10px solid;background-color: aqua;
}
.active {color: salmon;
}
</style>

三、兩個注意點

  1. 路由組件通常存放在pages 或 views文件夾,一般組件通常存放在components文件夾。
  2. 通過點擊導航,視覺效果上“消失” 了的路由組件,默認是被卸載掉的,需要的時候再去掛載

四、路由器工作模式

  1. history模式優點:URL更加美觀,不帶有#,更接近傳統的網站URL。缺點:后期項目上線,需要服務端配合處理路徑問題,否則刷新會有404錯誤。
const router = createRouter({history:createWebHistory(), //history模式/******/
})
  1. hash模式優點:兼容性更好,因為不需要服務器端處理路徑。缺點:URL帶有#不太美觀,且在SEO優化方面相對較差。
const router = createRouter({history:createWebHashHistory(), //hash模式/******/
})

五、to的兩種寫法

字符串、對象

<!-- 第一種:to的字符串寫法 -->
<router-link active-class="active" to="/home">主頁</router-link><!-- 第二種:to的對象寫法 -->
<router-link active-class="active" :to="{path:'/home'}">Home</router-link>

六、命名路由

作用:可以簡化路由跳轉及傳參(后面就講)。

給路由規則命名:

routes:[{name:'zhuye',path:'/home',component:Home},{name:'xinwen',path:'/news',component:News,},{name:'guanyu',path:'/about',component:About}
]

跳轉路由:

<!--簡化前:需要寫完整的路徑(to的字符串寫法) -->
<router-link to="/news/detail">跳轉</router-link><!--簡化后:直接通過名字跳轉(to的對象寫法配合name屬性) -->
<router-link :to="{name:'guanyu'}">跳轉</router-link>

七、嵌套路由

  1. 編寫News的子路由:Detail.vue
  2. 配置路由規則,使用children配置項:
const router = createRouter({history:createWebHistory(),routes:[{name:'zhuye',path:'/home',component:Home},{name:'xinwen',path:'/news',component:News,children:[{name:'xiang',path:'detail',component:Detail}]},{name:'guanyu',path:'/about',component:About}]
})
export default router
  1. 跳轉路由(記得要加完整路徑):
<router-link to="/news/detail">xxxx</router-link>
<!-- 或 -->
<router-link :to="{path:'/news/detail'}">xxxx</router-link>
  1. 記得去News組件中預留一個<router-view>
<template><div class="news"><!-- 導航區 --><ul><li v-for="news in newsList" :key="news.id"><RouterLink to="/news/detail">{{ news.title }}</RouterLink></li></ul><div class="news-detail"><RouterView /></div></div>
</template><script lang="ts" setup name="News">
import { reactive } from 'vue'
import { RouterLink, RouterView } from 'vue-router'
let newsList = reactive([{ id: 'dawd1', title: '1', content: '11' },{ id: 'dawd2', title: '2', content: '22' },{ id: 'dawd3', title: '3', content: '33' }
])
</script>

八、路由傳參

query參數

  1. 傳遞參數(query參數可以用path和name)
<!-- 跳轉并攜帶query參數(to的字符串寫法) -->
<router-link to="/news/detail?a=1&b=2&content=歡迎你">跳轉
</router-link><!-- 跳轉并攜帶query參數(to的對象寫法) -->
<RouterLink :to="{//name:'xiang', //用name也可以跳轉path:'/news/detail',query:{id:news.id,title:news.title,content:news.content}}"
>{{news.title}}
</RouterLink>
  1. 接收參數:
import {useRoute} from 'vue-router'
const route = useRoute()
// 打印query參數
console.log(route.query)

params參數

路由配置(如果傳遞的參數不是必須的,在后面加個?):

{name: "xinwen",path: "/news",component: News,children: [{name: "xiang",path: "detail/:id/:title/:content",component: Detail,},],},
  1. 傳遞參數(params參數只能用name)
<!-- 跳轉并攜帶params參數(to的字符串寫法) -->
<RouterLink :to="`/news/detail/001/新聞001/內容001`">{{news.title}}</RouterLink><!-- 跳轉并攜帶params參數(to的對象寫法) -->
<RouterLink :to="{name:'xiang', //用name跳轉params:{id:news.id,title:news.title,content:news.title}}"
>{{news.title}}
</RouterLink>
  1. 接收參數:
import {useRoute} from 'vue-router'
const route = useRoute()
// 打印params參數
console.log(route.params)

備注1:傳遞params參數時,若使用to的對象寫法,必須使用name配置項,不能用path。

備注2:傳遞params參數時,需要提前在規則中占位。

九、路由的props配置

作用:讓路由組件更方便的收到參數(可以將路由參數作為props傳給組件)

{name: "xiang",path: "detail/:id/:title/:content",component: Detail,// 第一種(傳遞值給路由組件):props的對象寫法,作用:把對象中的每一組key-value作為props傳給Detail組件// props:{a:1,b:2,c:3},// 第二種(只適用于props):props的布爾值寫法,作用:把收到了每一組params參數,作為props傳給Detail組件// props:true// 第三種(適用于props、query):props的函數寫法,作用:把返回的對象中每一組key-value作為props傳給Detail組件props(route) {return route.query;},},

使用defineProps進行接收

<template><ul><li>編號:{{ id }}</li><li>標題:{{ title }}</li><li>內容:{{ content }}</li></ul>
</template><script lang="ts" setup name="Detail">
defineProps(['id', 'title', 'content'])
</script>

十、 replace屬性

  1. 作用:控制路由跳轉時操作瀏覽器歷史記錄的模式。
  2. 瀏覽器的歷史記錄有兩種寫入方式:分別為push和replace:
    • push是追加歷史記錄(默認值)。
    • replace是替換當前記錄。
  1. 開啟replace模式:<RouterLink replace .......>News</RouterLink>

十一、編程式導航

路由組件的兩個重要的屬性:$route和$router變成了兩個hooks

<template><div class="news"><!-- 導航區 --><ul><li v-for="news in newsList" :key="news.id"><!-- <RouterLink to="/news/detail">{{ news.title }}</RouterLink> --><!-- 跳轉并攜帶params參數(to的字符串寫法) --><!-- <RouterLink :to="`/news/detail/001/新聞001/內容001`">{{news.title}}</RouterLink> --><!-- 跳轉并攜帶params參數(to的對象寫法) --><button @click="showNewsDetail(news)">點擊查看新聞</button><RouterLink:to="{name: 'xiang', //用name跳轉params: {id: news.id,title: news.title,content: news.title}}">{{ news.title }}</RouterLink></li></ul><div class="news-detail"><RouterView /></div></div>
</template><script lang="ts" setup name="News">
import { reactive } from 'vue'
import { RouterLink, RouterView, useRouter } from 'vue-router'
let newsList = reactive([{ id: 'dawd1', title: '1', content: '11' },{ id: 'dawd2', title: '2', content: '22' },{ id: 'dawd3', title: '3', content: '33' }
])
const router = useRouter()
interface NewsInter {id: stringtitle: stringcontent: string
}
function showNewsDetail(news: NewsInter) {router.replace({name: 'xiang', //用name跳轉params: {id: news.id,title: news.title,content: news.title}})
}
</script>

十二、重定向

  1. 作用:將特定的路徑,重新定向到已有路由。
  2. 具體編碼:
{path:'/',redirect:'/about'
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/13018.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/13018.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/13018.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【ARMv8/v9 系統寄存器 5 -- ARMv8 Cache 控制寄存器 SCTRL_EL1 使用詳細介紹】

關于ARM Cache 詳細學習推薦專欄&#xff1a; 【ARM Cache 專欄】 【ARM ACE Bus 與 Cache 專欄】 文章目錄 ARMv8/v9 Cache 設置寄存器ARMv8 指令 Cache 使能函數測試代碼 ARMv8/v9 Cache 設置寄存器 關于寄存器SCTRL_EL1 的詳細介紹見文章&#xff1a;【ARMv8/v9 異常模型入…

純正英語新聞 5.15

seizing territory &#xff1a;奪取領土 battlefield:戰場 shrinking&#xff1a;縮小 paramedic&#xff1a;醫護人員 mercilessly destroy&#xff1a;無情地摧殘 blown up&#xff1a;炸毀 northern outskirts :北郊 terrified&#xff1a;害怕 shelling&#xff…

西南大學計算機考研,選學碩還是專碩?西南大學計算機考研考情分析!

西南大學&#xff08;Southwest University&#xff09;是教育部直屬&#xff0c;教育部、農業農村部、重慶市共建的重點綜合大學&#xff0c;是國家首批"雙一流"建設高校&#xff0c;"211工程"和"985工程優勢學科創新平臺"建設高校。現任黨委書…

【嵌入式大賽應用賽道】機械手臂

電機 進步電機&#xff1a;它的轉動是以確定的步數進行的&#xff0c;只要計算好脈沖數量和頻率&#xff0c;就可以準確預測和控制電機的轉動角度、速度以及停止的位置 伺服電機&#xff1a;將輸入的電信號&#xff08;如電壓或電流指令&#xff09;轉換成軸上的精確旋轉運動…

大模型算法(一):從Transformer到ViT再到LLaMA

單任務/單領域模型 深度學習最早的研究集中在針對單個領域或者單個任務設計相應的模型。 對于CV計算機視覺領域&#xff0c;最常用的模型是CNN卷積模型。其中針對計算機視覺中的不同具體任務例如分類任務&#xff0c;目標檢測任務&#xff0c;圖像分割任務&#xff0c;以CNN作…

【傳知代碼】VRT: 關于視頻修復的模型(論文復現)

前言&#xff1a;隨著數字媒體技術的普及&#xff0c;制作和傳播視頻內容變得日益普遍。但是&#xff0c;視頻中由于多種因素&#xff0c;例如傳輸、存儲和錄制設備等&#xff0c;經常出現質量上的問題&#xff0c;如圖像模糊、噪聲干擾和低清晰度等。這類問題對用戶的體驗和觀…

hive動態分區

hive動態分區概念:允許插入數據到分區表時,根據插入的數據內容自動創建相應的分區 1.啟用動態分區功能 hive.exec.dynamic.partitiontrue; 2.分區字段設置 在insert語句中, 動態分區的字段必須放在select語句的末尾,hive會根據這個字段的值來創建分區目錄 示例: --創建分區表…

幾個排序器的verilog及其資源占用、延時分析

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 前言 因為課題需要&#xff0c;調研了幾個快速排序方法&#xff0c;并手寫或者改進了若干待測試對象&#xff0c;包括記分板型冒泡排序&#xff08;這個是別人的&#xff09…

樹莓派|I2C通信

什么是I2C通信 I2C&#xff08;Inter-Integrated Circuit&#xff09;是一種串行通信協議&#xff0c;用于在集成電路(IC)之間傳輸數據。它由飛利浦公司&#xff08;現在的恩智浦半導體公司&#xff09;在20世紀80年代開發&#xff0c;并且成為了廣泛應用于各種電子設備中的通…

Spring Security 6.x 系列【73】認證篇之同端互斥登錄

有道無術,術尚可求,有術無道,止于術。 本系列Spring Boot 版本 3.1.0 本系列Spring Security 版本 6.1.0 源碼地址:https://gitee.com/pearl-organization/study-spring-security-demo 文章目錄 1. 概述2. 實現方案3. 案例演示3.1 內存會話3.1.1 并發控制流程分析3.1.2 功…

【35分鐘掌握金融風控策略28】貸中模型體系策略應用

目錄 貸中模型體系策略應用 信用模型體系和模型在策略中的應用 反欺詐模型體系和模型在策略中的應用 運營模型體系和模型在策略中的應用 貸中模型體系策略應用 在貸前模型部分已經講過&#xff0c;貸前開發的很多模型是可以在貸中直接使用的。貸中與貸前的不同點在于&…

ubuntu升級python

添加Python官方PPA源 sudo add-apt-repository ppa:deadsnakes/ppa 執行會顯示各個版本ubuntu可以安裝哪些python版本 更新軟件包索引 sudo apt update 安裝需要版本Python sudo apt install python3.11 檢查Python版本: which python11 /usr/bin/python3.11 設置為系統默認Pyt…

自定義一個starter

在Spring Boot中&#xff0c;創建一個自定義starter可以簡化特定功能或組件的配置過程&#xff0c;讓其他項目能夠輕松地重用這些功能。 這里我們以自定義一個xxl-job的starter為例&#xff0c;介紹下如何簡化配置。 添加依賴 <dependencies><dependency><gro…

STK中的光照計算模型

本文簡要闡述STK中光照計算的模型。 在航天任務中&#xff0c;通常需要分析地面站、飛行器在一定時間內的光照情況&#xff0c;具體包括&#xff1a; 地面站處在光照區和陰影區的具體時間范圍&#xff1b;考慮地形遮擋后&#xff0c;地面站的光照區和陰影區的變化情況&#x…

985大學電子信息專碩,考C語言+數據結構!中央民族大學25計算機考研考情分析!

中央民族大學&#xff08;Minzu University of China&#xff09;坐落于北京市學府林立的海淀區&#xff0c;南鄰國家圖書館&#xff0c;北依中關村科技園&#xff0c;校園環境典雅&#xff0c;古樸幽美&#xff0c;人文氛圍濃郁&#xff0c;具有鮮明的民族特色。由北京市、國家…

Java byte數據類型

在Java中&#xff0c;byte是一種基本的數據類型&#xff0c;用于表示整數值。它是8位帶符號的二進制補碼&#xff0c;范圍從-128到127&#xff08;包括&#xff09;。 以下是一些關于byte數據類型的重要信息&#xff1a; 大小和范圍&#xff1a;byte數據類型占用8位&#xff0…

Oracle 日志文件頭中的SCN

日志文件頭中的SCN主要分以下3類&#xff1a; 1、FIRST_CHANGE 2、NEXT_CHANGE 3、RESETLOGS_CHANGE# FIRST_CHANGE# FIRST_CHANGE#表示該在線日志文件被重用時的SCN。可以從VKaTeX parse error: Expected EOF, got # at position 25: …RY.FIRST_CHANGE#?列查詢&#xff0c;…

Cesium學習_-著色器

著色器GLSL CesiumJS PrimitiveAPI 高級著色入門 - 從參數化幾何與 Fabric 材質到著色器 - 下篇 - 知乎 明確一個定義&#xff0c;在 Primitive API 中應用著色器&#xff0c;實際上是給 Appearance 的 vertex- ShaderSource、fragmentShaderSource 或 Material 中的 fabric.…

Java 異步編程——為什么要使用多線程,以及在什么情況下使用多線程?

前言 單線程就是一個工人在搬磚&#xff0c;多線程就是多個工人在搬磚&#xff1b;在相同數量的磚要搬的情況下&#xff0c;多個工人搬磚肯定比一個人搬的快。 那多個工人做事一定比一個工人做事快嗎&#xff1f;那不一定&#xff0c;不過大多數情況下是的。多線程只是可以同…

Java并發編程——線程安全

在Java并發編程中&#xff0c;線程安全是一個非常重要的概念。當多個線程同時訪問共享數據時&#xff0c;如果沒有采取適當的同步措施&#xff0c;就可能會導致數據不一致或其他不可預期的行為&#xff0c;這就是線程不安全的情況。 為了保證線程安全&#xff0c;Java提供了一…