單頁面應用的特點,什么是路由,VueRouter的下載,安裝和使用,路由的封裝抽離,聲明式導航的介紹和使用

文章目錄

      • 一.什么是單頁面應用?
      • 二.什么是路由?
        • 生活中的路由和Vue中的路由
      • 三.VueRouter(重點)
        • 0.引出
        • 1.介紹
        • 2.下載與使用(5個基本步驟+2個核心步驟)
          • 2.1 五個基本步驟
          • 2.2 兩個核心步驟
      • 四.路由的封裝抽離
      • 五.聲明式導航
        • 1.導航鏈接
          • 特點一:能跳轉
          • 特點二:能高亮
        • 2.兩個高亮類名
          • 2.1.區別
          • 2.2.為什么支持模糊匹配的類用得更多?
          • 2.3.自定義高亮類名
        • 3.跳轉傳參
          • 3.1.查詢參數傳參--在配置路徑的同時進行傳參
          • 3.2.動態路由傳參:路由不再是寫死的,而是動態的
        • 3.3.動態路由傳參的可選符(?)
      • 六.路由重定向

一.什么是單頁面應用?

  • 定義和特點:所有功能都在一個HTML中實現

  • 示例:網易云音樂

  • 多頁面應用:京東和淘寶

  • 區別:兩者的導航欄跳轉方式明顯不同

  • 對比:

    • 單頁只有一個HTML頁面,按需更新性能高,開發效率快,用戶體驗好,但學習成本高,首屏加載慢,SEO較差
    • 多頁即多個HTML頁面,整頁更新的特點讓其性能較低,開發效率一般,用戶體驗一般,學習成本中等,但首屏加載快,SEO較好
      *SEO:搜索引擎優化,可以理解為搜索結果的友好度
  • 使用場景:

    • 單頁:系統類網站,內部網站,文檔類網站,移動端網站
    • 多頁:公司官網,電商類網站

二.什么是路由?

由于單頁面應用的按需更新的特點,我們必須明確訪問路徑組件的對應關系
這就需要用到路由,它實際上是一種映射關系

生活中的路由和Vue中的路由

路由器:IP和設備之間的映射關系
Vue中的路由:路徑和組件之間的映射關系
示例:

http://localhost:8080#home路徑 映射到 Home.vue組件
http://localhost:8080#comment路徑 映射到 Comment.vue組件
http://localhost:8080#search路徑 映射到 Search.vue組件

三.VueRouter(重點)

0.引出

在單頁面應用中,點擊導航欄的不同標簽,
首先,地址欄中的地址要發生變化.其次,導航欄下方的組件也要對應變化

–Vue官方提供了一個插件可實現以上功能,即VueRouter

1.介紹
  • 作用:修改地址欄地址時,切換顯示匹配的組件
  • 本質:Vue官方的一個路由插件,是一個第三方包
2.下載與使用(5個基本步驟+2個核心步驟)
2.1 五個基本步驟
  • 下載:下載VueRouter模塊到當前工程項目中(Vue.2對應的版本是3.6.5)*
安裝命令:yarn add vue-router@3.6.5:此命令我按照報錯,最后用了這個命令:npm install vue-router@3.6.5 -g對于安裝版本的匹配,有個口訣叫"233 344",:
Vue2+VueRouter3.x+Vuex3.x
"344"同理
  • 引入
main.js==>若不考慮路由的封裝和抽離,所有路由相關代碼可先堆在main.js中import VueRouter from 'vue-router'
  • 安裝注冊
//由于VueRouter是Vue的插件,所以必須先安裝注冊后才能使用
Vue.use(VueRouter)//內部會對組件進行全局的注冊,即插件的初始化
  • 創建路由對象
const router=new VueRouter();//此時的路由對象和Vue實例還沒有建立關聯
  • 注入:將路由對象注入到new Vue實例中,建立關聯
new Vue({render:h=>h(App),//router:router可簡寫如下:router
}).$mounted("#app");
//注入完成,代表著這個Vue實例已經被路由對象接管了
//效果:地址欄最后會多出一個"#"

完整代碼:main.js

//1.下載:在根目錄文件下下載:npm install vue-router@3.6.5 -gmain.js
//2.引入
import VueRouter from "vue-router"
//3.安裝注冊
Vue.use(VueRouter);//VueRouter插件初始化
//4.創建路由對象
const router=new VueRouter();//后續可以在里面添加路由規則
//5.注入
new Vue({render:h=>h(app),router,//router:router,簡寫成router,(router:rOther)
}).$mount("#app")//當前vue實例已被路由對象所管理
//成功標志:地址欄多了"#"
2.2 兩個核心步驟
  • 項目代碼
//App.vue
<div class="footer_warp"><a>發現音樂</a><a>我的音樂</a><a>好友</a>
</div>
//新建Views文件夾下的FindMusic.vue,MyMusic.vue和MyFriends.vue三個組件,
//內容隨意,引入過程略
  • step1:配置規則
//main.js或router/index.jsimport FindMusic from "..."
...
const router =new VueRouter({routes:[//配置規則{path:'/FindMusic',component:FindMusic},{path:'/MyMusic',component:MyMusic},{path:'/MyFriends',component:MyFriends},//此處可直觀看到路由的定義:path和component之間的映射
});

*path中的路徑沒有"."在前面,不要寫成相對路徑

  • step2:配置導航
     <a href="#/FindMusic"">發現音樂</a><a href="#/MyMusic">我的音樂</a><a href="#/MyFriends">好友</a><div><!-- 這個標簽的位置決定了組件內容展示的位置--><router-view></router-view></div>

最終效果:點擊不同的a標簽,地址欄顯示不同的"#"后的內容

四.路由的封裝抽離

把所有的路由配置都放在main.js顯然是不合適的,因此要將路由模塊抽離出來,更利于維護

  • 步驟

把剛剛在main.js 中寫的路由相關的代碼挪到新建的router/index.js中然后在main,js中導入

import router from "./router/index.js"
  • 注意事項
  1. 把代碼放入index.js 后,相對路徑會發生變化,此時要么調整成正確的相對路徑,要么使用"@"(代表src文件夾),寫入絕對路徑
  2. 需要在index.js中重新引入Vue,因為使用到了Vue.use(VueRouter),其實main.js也有,只是引用語句import Vue from "vue"在main,js中是自動生成的
  3. 最后需將路由對象導出:export default router;

五.聲明式導航

在Vue2中:
聲明式導航就是<router-link to=""></router-link>,<router-link to=""></router-link>就是聲明式導航
與聲明式導航相對的是編程式導航

1.導航鏈接

使用vue-router的全局組件<router-link to=""></router-link>代替a標簽,可以實現導航高亮效果(當前在哪個tag,它就有不同顏色

特點一:能跳轉
<router-link to="/FindMusic">發現音樂</router-link>

to不可省略且不用在路徑中加"#",對比a標簽:

<a href="#/FindMusic"">發現音樂</a>
特點二:能高亮

聲明式導航能實現自動高亮,默認提供高亮類名,可以通過高亮類名設置高亮樣式
(在控制臺能看到選中的a標簽自動獲得兩個類名)
route-link本質上還是a標簽,在控制臺查看元素,發現渲染出來的還是<a></a>

2.兩個高亮類名

<router-link to=""></router-link>會自動給當前導航添加兩個高亮類名,
分別叫:router-link-exact-activerouter-link-active

2.1.區別
  • router -link-active
    這個用得多,它是模糊匹配的
    如:a href="#/my"標簽中有這個類,那么它將匹配所有以my開頭的路徑:/my /my/a /my/b
  • router-link-exact-active
    這個類時精確匹配的,寫的什么就匹配什么
2.2.為什么支持模糊匹配的類用得更多?

場景:網易云音樂在"發現音樂"的一級導航欄下面還有二級導航欄:推薦,排行榜,歌單等等
此時我們對頁面有一個需求,
即用戶在二級菜單下來回點擊的時候,一級導航欄"發現音樂"要保持高亮狀態
這時候就是模糊匹配中的/my/a和/my/b情況(/FindMusic/、 /FindMusic/TopList 和/FindMusic/PlayList)
在這里插入圖片描述

2.3.自定義高亮類名

這兩個類名太長了,可以在router路由對象中進行定制:

//main.js或index.js
const router=new VueRouter({routes:[...],linkActiveClass:"新類名1",//比如"active"linkExactActiveClass:"新類名2",//比如:"exact-active"
});
//style
.active{}
.exact-active{}
3.跳轉傳參
  • 目標:在跳轉路由的時候傳值
  • 場景:
    在搜索欄下方的熱門搜索詞中,點擊其中一個,會跳轉到搜索該詞條的結果頁,即:
    這個詞條就是跳轉過程中所傳的值
  • 方法:查詢參數傳參和動態路由傳參
3.1.查詢參數傳參–在配置路徑的同時進行傳參
  • 語法:和地址欄傳參的格式一致,故被稱為查詢參數傳參
to="path?參書名1=參數值1&參數名2=參數值2"
  • 獲取參數:對應頁面的組件接受傳過來的值
$router.query.參數名
  • 示例:在首頁點擊不同文字后跳轉到搜索頁,并傳參
//首頁:Home.vue
<!-- 第一步:路徑后加?屬性名和屬性值鍵值對 -->
<router-link to="/search?key=特朗普">特朗普</router-link>
<router-link to="/search?key=中美關稅">中美關稅</router-link>
<router-link to="/search?key=貿易戰">貿易戰</router-link>//搜索頁:Search.vue
<div class="search"><!-- 第二步:對應頁面組件接受傳值 --><p>搜索關鍵字{{$route.query.key}}</p><p>搜索結果<ul><li>...</li></ul></p>
</div>/*
思考:在搜索頁中什么時候和如何拿到參數?
答:在created中獲取,此時要加this
created(){console.log(this.$route.query.key);
}
*/
3.2.動態路由傳參:路由不再是寫死的,而是動態的
  • step1:配置動態路由
routes:[{path:"/search/:word", /*word是參數名,冒號不能省略,此時能匹配多個路徑*/components:Search}
]
  • step2:配置導航鏈接
to="/path/參數值"
  • step3:對應頁面的組件接受傳過來的值
$route.params.參數名,:
$route.params.word
  • 示例
//router/index.js
routes:[{path:"/home",component:Home},{path:"/search/:word",component:Search};//step1:配置動態路由
]//首頁:Home.vue
//step2:配置導航鏈接
<router-link to="/search/特朗普">特朗普</router-link>
<router-link to="/search.中美關稅">中美關稅</router-link>
<router-link to="/search/貿易戰">貿易戰</router-link>//搜索頁:Search.vue
//step3:接收傳值
<p>搜索關鍵字:{{$route.params.word}}
//同理在created中:
created(){console.log(this.$route.params.word);//可以從獲取到的值來對搜索結果進行渲染
}
/*
注意區別:獲取查詢參數:this.$route.query.參數名獲取動態路由參數:this.$route.query.參數名
*/
3.3.動態路由傳參的可選符(?)

如果沒有可選符可能會遇到的問題–
當配置路由的寫法是這樣的時候:

{path:"/search/:word",component:Search}

意味著必須攜帶參數,否則不通過傳參直接進入搜索頁時顯示是空白的
解決方法:使用可選符(?)

{path:"/search/:word?",component:Search}

直接進入搜索頁可以正常渲染,不會徐成空白

六.路由重定向

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

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

相關文章

【C++】模板2.0

最近學習了一些模板的知識&#xff0c;速寫本博客作為學習筆記&#xff0c;若有興趣&#xff0c;歡迎垂閱讀&#xff01; 1.非類型模板參數 模板參數分類類型形參與非類型形參。 類型形參即&#xff1a;出現在模板參數列表中&#xff0c;跟在class或者typename之類的參數類型名…

目標檢測中的損失函數(二) | BIoU RIoU α-IoU

BIoU來自發表在2018年CVPR上的文章&#xff1a;《Improving Object Localization With Fitness NMS and Bounded IoU Loss》 論文針對現有目標檢測方法只關注“足夠好”的定位&#xff0c;而非“最優”的框&#xff0c;提出了一種考慮定位質量的NMS策略和BIoU loss。 這里不贅…

如何在 Amazon EC2 上部署 Java(Spring Boot 版)

讓我們學習如何將 Java Spring Boot Web 服務器部署到 Amazon EC2。每月只需 3 美元。 使用 Azure&#xff0c;您可能不知道要花費多少錢。 Spring Boot 項目示例 在本教程中&#xff0c;我們將重點介紹如何將 Java Spring Boot 服務器部署到 Amazon EC2&#xff0c;因此我們不…

Git常用命令分類匯總

Git常用命令分類匯總 一、基礎操作 初始化倉庫git init添加文件到暫存區git add file_name # 添加單個文件 git add . # 添加所有修改提交更改git commit -m "提交描述"查看倉庫狀態git status二、分支管理 創建/切換分支git branch branch_name …

mysql——基礎知識

關鍵字大小寫不敏感 查看表結構中的 desc describe 描述 降序中的 desc descend 1. 數據庫的操作 1. 創建數據庫 create database 數據庫名;為防止創建的數據庫重復 CREATE DATABASE IF NOT EXISTS 數據庫名;手動設置數據庫采用的字符集 character set 字符集名;chars…

Redis 哨兵與集群腦裂問題詳解及解決方案

Redis 哨兵與集群腦裂問題詳解及解決方案 本文將深入探討Redis在哨兵模式和集群模式下可能出現的腦裂問題&#xff0c;包括其發生場景、原因以及有效的解決策略。同時&#xff0c;我們還將提供相應的代碼示例和配置方案來幫助讀者理解和實施。 一、腦裂問題概述 腦裂&#x…

國內網絡設備廠商名單(List of Domestic Network Equipment Manufacturers)

國內網絡設備廠商名單 運維工程師必須廣泛熟悉國內外各大廠商的設備&#xff0c;深入掌握其應用場景、功能特點及優勢。這不僅有助于在故障排查時迅速定位問題&#xff0c;還能在系統設計、優化與升級中做出更合理的決策。對設備特性的精準把握&#xff0c;能夠顯著提升運維效…

2、SpringAI接入ChatGPT與微服務整合

2、SpringAI接入ChatGPT與微服務整合 小薛博客AI 大模型資料 1、SpringAI簡介 https://spring.io/projects/spring-ai Spring AI是一個人工智能工程的應用框架。其目標是將Spring生態系統的設計原則&#xff08;如可移植性和模塊化設計&#xff09;應用于人工智能領域&#…

基于ubuntu24.10安裝NACOS2.5.1的簡介

基于ubuntu24.10安裝NACOS2.5.1的簡介 官方網站地址&#xff1a; https://nacos.io 可訪問nacos站點 https://nacos.io/zh-cn/ 2025年04月記錄發布 V2.5.1 版本 一、環境預準備 64 bit JDK 1.8&#xff1b; sudo apt update sudo apt install openjdk-8-jdk sudo apt upda…

神經網絡:從基礎到應用,開啟智能時代的大門

在當今數字化時代&#xff0c;神經網絡已經成為人工智能領域最熱門的技術之一。從語音識別到圖像分類&#xff0c;從自然語言處理到自動駕駛&#xff0c;神經網絡的應用無處不在。它不僅改變了我們的生活方式&#xff0c;還為各個行業帶來了前所未有的變革。本文將帶你深入了解…

[k8s實戰]Containerd 1.7.2 離線安裝與配置全指南(生產級優化)

[k8s實戰]Containerd 1.7.2 離線安裝與配置全指南&#xff08;生產級優化&#xff09; 摘要&#xff1a;本文詳細講解在無外網環境下部署 Containerd 1.7.2 容器運行時的完整流程&#xff0c;涵蓋二進制包安裝、私有鏡像倉庫配置、Systemd服務集成等關鍵步驟&#xff0c;并提供…

【CPU】結合RISC-V CPU架構回答中斷系統的7個問題(個人草稿)

結合RISC-V CPU架構對中斷系統七個關鍵問題的詳細解析&#xff0c;按照由淺入深的結構進行說明&#xff1a; 一、中斷請求機制&#xff08;問題①&#xff09; 硬件基礎&#xff1a; RISC-V通過CLINT&#xff08;Core Local Interrupter&#xff09;和PLIC&#xff08;Platfor…

[密碼學實戰]國密算法面試題解析及應用

以下是密碼學領域常見的面試題及其詳細解析,涵蓋基礎理論、算法實現與應用場景,幫助系統化備戰技術面試 一、基礎概念類 1. 密碼學的主要目標是什么? 答案: 確保數據的機密性(加密防止竊聽)、完整性(哈希校驗防篡改)、認證性(數字簽名驗證身份)和不可否認性(簽名防…

Spring Boot 實現 Excel 導出功能(支持前端下載 + 文件流)

&#x1f9e0; 一、為什么用 EasyExcel&#xff1f; 在 Java 開發中&#xff0c;操作 Excel 的框架主要有&#xff1a; Apache POI&#xff08;經典但慢、內存占用大&#xff09; JXL&#xff08;老舊不維護&#xff09; Alibaba EasyExcel&#xff08;阿里出品&#xff0c;…

【論文速遞】2025年06周 (Robotics/Embodied AI/LLM)

目錄 SMOLLM2&#xff1a;當Smol變得大 - 以數據為中心的小語言模型英文摘要中文摘要 OmniHuman-1&#xff1a;重新考慮一階段的人類動畫模型的擴展英文摘要中文摘要 S1&#xff1a;簡單的測試時間縮放英文摘要中文摘要 直接對齊算法間的差異日漸模糊英文摘要中文摘要 VideoJAM…

學習深度學習是否要先學習機器學習?工程師的路徑選擇策略

深度學習與機器學習的關系&#xff0c;如同摩天大樓與地基——前者是后者的高階延伸&#xff0c;但能否繞過地基直接造樓&#xff1f;本文從技術本質、學習曲線、應用場景三個維度剖析這一關鍵問題。 一、技術血脈的承繼關系 概念體系同源&#xff1a; 損失函數、梯度下降、過擬…

開始放飛之先搞個VSCode

文章目錄 開始放飛之先搞個VSCode重要提醒安裝VSCode下載MinGW-w64回到VSCode中去VSCode原生調試鍵盤問題遺留問題參考文獻 開始放飛之先搞個VSCode 突然發現自己的新臺式機上面連個像樣的編程環境都沒有&#xff0c;全是游戲了&#xff01;&#xff01;&#xff01;&#xff…

【2025“華中杯”大學生數學建模挑戰賽】選題分析 A題 詳細解題思路

目錄 2025“華中杯”大學生數學建模挑戰賽選題分析A題&#xff1a;晶硅片產銷策略優化B題&#xff1a;校園共享單車的調度與維護問題C題&#xff1a;就業狀態分析與預測D題&#xff1a;患者院內轉運不良事件的分析與預測 A 題 晶硅片產銷策略優化問題 1&#xff1a;月利潤計算模…

YOLO11改進,尺度動態損失函數Scale-based Dynamic Loss,減少標簽不準確對損失函數穩定性的影響

在目標檢測領域,標簽噪聲與尺度敏感問題始終是制約模型性能提升的"阿喀琉斯之踵"。2025年CVPR最佳論文提出的尺度動態損失函數(Scale-based Dynamic Loss, SDL),通過構建自適應損失調節機制,不僅實現了對YOLOv11檢測精度的指數級提升,更重新定義了損失函數的設…

緩存 --- 內存緩存 or 分布式緩存

緩存 --- 內存緩存 or 分布式緩存 內存緩存&#xff08;In-Memory Cache&#xff09;分布式緩存&#xff08;Distributed Cache&#xff09;內存緩存 vs 分布式緩存 內存緩存和分布式緩存是兩種常見的緩存策略&#xff0c;它們在存儲位置、訪問速度和適用場景上有所不同。下面分…