最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue3中路由寫(xiě)法與傳參方式的超詳細(xì)指南

 更新時(shí)間:2024年11月19日 15:21:06   作者:YinLiaoEr  
Vue?Router是Vue.js官方的路由管理器,它主要用于單頁(yè)面應(yīng)用程序中,幫助解決頁(yè)面導(dǎo)航、組件復(fù)用等問(wèn)題,下面我們就來(lái)看看vue3中路由寫(xiě)法與傳參方式吧

Vue Router 是 Vue.js 官方的路由管理器。它主要用于單頁(yè)面應(yīng)用程序(SPA, Single Page Application)中,幫助解決頁(yè)面導(dǎo)航、組件復(fù)用等問(wèn)題。

基本的使用

1.router配置文件代碼

創(chuàng)建一個(gè)ts文件,用來(lái)寫(xiě)路由器

// 創(chuàng)建一個(gè)路由器,并暴露出去
// 引入路由配置文件
import { createRouter, createWebHashHistory,createWebHistory } from 'vue-router'
// 引入可能呈現(xiàn)的組件
import person from '@/components/person.vue'
import button from '@/view或pages/button.vue'
import detail from '@/view或pages/detail.vue'
// 創(chuàng)建路由器
const router = createRouter({
  // 必須要寫(xiě),路由的工作模式  history/Hash
  // history: createWebHashHistory(),
  history: createWebHistory(),
  // 路由規(guī)則
  routes: [
    /*  路由規(guī)則格式如下:
        其中path 和 component是必填項(xiàng), 其他選填
    {
      path: '/路徑',
      component: aComponent,  對(duì)應(yīng)的組件,后面展示不同的寫(xiě)法
      name: 'name',
      ...其他配置
    },
    */
    {
      path: '/person',
      component: person
    },
    {
      path: '/table',
      component: () => import('@/view或pages/table.vue')
    },
    {
      path: '/button',
      component: button
    },
    {
      path: '/news',
      name: 'news',
      component: () => import('@/view或pages/news.vue'),
      children: [
        {
          path: 'detail',
          component: detail
        }
      ]
    },
  ]
})
 
export default router

路由模式:  通常用history的更多

history:  url不帶#,但是需要服務(wù)端配合處理路徑問(wèn)題 

hash:   url帶# 不需要服務(wù)器處理路徑問(wèn)題,但是SEO優(yōu)化方面較差

嵌套路由

有的時(shí)候我們路由展示了一個(gè)組件,但是這個(gè)組件里面還有別的路由組件,這時(shí)候需要使用嵌套路由

//       如果有子路由(嵌套路由),寫(xiě)在children里面
//       其寫(xiě)法跟正常的路由是一樣的,但子路由的路徑,不用加一開(kāi)始的/
//       這個(gè)路由最終路徑為 /news/testDetail
{
      path: '/news',
      name: 'xinwen',
      component: () => import('@/view或pages/news.vue'),
      children: [
        {
          name: 'testDetail',
          path: 'detail/:id/:title/:content',
          component: detail
        },
 
        /*  其他子路由 
        {
          
        }
        */
 
      ]
},

路由重定向

將特定的路徑,重新定向到已有路由,通常是用于默認(rèn)展示某某內(nèi)容使用的

下面的代碼意思是,當(dāng)路徑為 / 的時(shí)候, 將會(huì)重定向訪(fǎng)問(wèn)到 /demo

{
    path:'/',
    redirect:'/demo'
}

2.使用router

main.ts中,我們需要使用router

import router from './router/index'
 
const app =createApp(App)
 
app.use(router)
app.mount('#app')

在需要使用router的頁(yè)面,使用RouterLink和RouterView來(lái)顯示對(duì)應(yīng)的vue頁(yè)面

<template>
  <div class="app">
    <h2 class="title">Vue路由測(cè)試</h2>
    <!-- 導(dǎo)航區(qū) -->
    <div class="navigate">
      <RouterLink to="/table" active-class="active">表格</RouterLink>
      <RouterLink to="/button" active-class="active">按鈕</RouterLink>
      <RouterLink to="/news" active-class="active">新聞</RouterLink>
    </div>
    <!-- 展示區(qū) -->
    <div class="main-content">
      <RouterView></RouterView>
    </div>
  </div>
</template>
 
<script lang="ts" setup name="App">
  import {RouterLink,RouterView} from 'vue-router'  
</script>

RouterLink 是用于定義導(dǎo)航鏈接的,它類(lèi)似于 HTML 中的 <a> 標(biāo)簽。點(diǎn)擊RouterLink 時(shí),Vue Router 會(huì)動(dòng)態(tài)更新視圖,而不會(huì)重新加載整個(gè)頁(yè)面。值得注意的是,RouterLink標(biāo)簽需要有一個(gè)to屬性,也就是點(diǎn)擊它后,給路由器的一個(gè)標(biāo)識(shí) (如何找到對(duì)應(yīng)組件)

RouterView用于顯示當(dāng)前路由對(duì)應(yīng)的組件,也就是把渲染出來(lái)的組件,放在對(duì)應(yīng)頁(yè)面的哪一個(gè)位置上。

to的寫(xiě)法

<!-- 第一種:to的字符串寫(xiě)法 直接寫(xiě)路徑的字符串 -->
<router-link active-class="active" to="/home">主頁(yè)</router-link>
 
<!-- 第二種:to的對(duì)象寫(xiě)法 -->
<router-link active-class="active" 
    :to="{
        path:'/home',
        // 其他配置等 ......
        }"
>
Home
</router-link>
 
<router-link active-class="active" 
    :to="{
        name:'detail',
        // 其他配置等 ......
        }"
>
Detail
</router-link>

通常還是對(duì)象寫(xiě)法用的更多一點(diǎn),因?yàn)楣δ苄愿鼜?qiáng) (可以使用name來(lái)路由, 傳參等等)

Replace屬性

replace屬性能夠設(shè)置在路由跳轉(zhuǎn)時(shí),瀏覽器操作歷史記錄的模式 (push/replace)

push: 歷史記錄入棧

push是默認(rèn)的模式,支持瀏覽器的返回和前進(jìn)。每次導(dǎo)航都會(huì)向?yàn)g覽器的歷史棧添加一個(gè)新的記錄。

replace:歷史記錄直接替換

新的路由會(huì)替換當(dāng)前的歷史記錄條目,而不是添加一個(gè)新的。這樣做的結(jié)果是,如果用戶(hù)點(diǎn)擊了后退按鈕,他們將不會(huì)回到剛剛從該頁(yè)面導(dǎo)航之前的位置,而是跳轉(zhuǎn)到更早的一個(gè)歷史記錄條目。

默認(rèn)是push,如果想要開(kāi)啟replace,只需要標(biāo)簽上加上這個(gè)屬性

<RouterLink replace .......>News</RouterLink>

路由傳參

傳遞和接收參數(shù)的關(guān)鍵是 route 對(duì)象。route 對(duì)象包含了當(dāng)前路由的所有信息,包括路徑、參數(shù)、查詢(xún)字符串等。為了在組件中訪(fǎng)問(wèn)這些信息,Vue Router 提供了 useRoute 鉤子。我們后續(xù)傳參會(huì)經(jīng)常用到它

1.Query參數(shù)

眾所周知,query參數(shù)就是在路徑后拼上鍵值對(duì),如 /路徑?id=1&name=Eve&age=18 因此我們可以直接在路徑上拼,或者是在to的對(duì)象中,用query來(lái)聲明

發(fā)送

<!-- 跳轉(zhuǎn)并攜帶query參數(shù)(to的字符串寫(xiě)法) -->
<router-link to="/person/detail?id=1&name=Eve&age=18">
	跳轉(zhuǎn)
</router-link>
				
<!-- 跳轉(zhuǎn)并攜帶query參數(shù)(to的對(duì)象寫(xiě)法) -->
<RouterLink 
  :to="{
    //name:'ren', //用name也可以跳轉(zhuǎn)
    path:'/person/detail',
    query:{
      id:1,
      name: 'Eve',
      age: 18
    }
  }"
>
 顯示人
</RouterLink>

接收

我們通過(guò)useRoute()來(lái)獲取到當(dāng)前組件的路由信息,接著把query取出來(lái)就行了

import {useRoute} from 'vue-router'
const route = useRoute()
// 打印query參數(shù)
const a = route.query
console.log(route.query.name); // Eve
console.log(route.query.age);  // 18

2.Params參數(shù)

我主要是學(xué)后端的,我感覺(jué)這個(gè)params參數(shù)就跟請(qǐng)求里面的那個(gè)PathVariable有一些相似之處,都是通過(guò)路徑來(lái)傳參的

路由的配置

注意點(diǎn)1:params參數(shù)需要在路由規(guī)則中占位; 注意點(diǎn)2:to中只能用name來(lái)進(jìn)行路由跳轉(zhuǎn),path不行

我這里主要是想傳到testDetail里面, 可以看到我打算傳三個(gè),id,title,content,

傳什么,就寫(xiě)    /:參數(shù)名

{
      path: '/news',
      name: 'xinwen',
      component: () => import('@/view或pages/news.vue'),
      children: [
        {
          name: 'testDetail',
          path: 'detail/:id/:title/:content',
          component: detail
        }
      ]
    },

發(fā)送

注意:參數(shù)必須按照路由中的順序傳 且不能少傳

<!-- 直接拼到路徑中,會(huì)按照占位去賦值 -->
<RouterLink :to="`/news/detail/001/新聞001/內(nèi)容001`">{{newsItem.title}}</RouterLink>
 
<RouterLink :to="{
    name:'testDetail', //用name跳轉(zhuǎn),不能用path
    params:{
        id:newItem.id,
        title:newItem.title,
        content:newItem.content
    }
}">
{{ newItem.title }}
</RouterLink>

少傳會(huì)報(bào)錯(cuò),導(dǎo)致功能無(wú)法使用

接收

與query非常相似,只不過(guò)是取的params

import { useRoute } from 'vue-router'
let route = useRoute()
console.log(route.params);

3.Props參數(shù)

路由的props配置

如果想要傳props參數(shù),需要在路由規(guī)則里面配置,它并不是單純的在RouterLink上面寫(xiě)的,而是需要RouterLink上傳入params參數(shù)

{
    name:'xiang',
    path:'detail/:id/:title/:content',
    component:Detail,
 
  // props的對(duì)象寫(xiě)法,作用:把對(duì)象中的每一組key-value作為props傳給Detail組件
  // 但是數(shù)據(jù)就是寫(xiě)死的了,因此用的很少
  // props:{a:1,b:2,c:3}, 
 
  // props的布爾值寫(xiě)法,作用:把收到了每一組"params"參數(shù),作為props傳給Detail組件
  // 如果寫(xiě)了true,那么正常按照params參數(shù)寫(xiě)就行,但是接收的地方可以通過(guò)defineProps來(lái)接
  // props:true
  
  // props的函數(shù)寫(xiě)法,作用:把返回的對(duì)象中每一組key-value作為props傳給Detail組件
  props(route){
 
  //  return route.query  想傳別的回去也行,但我們直接傳params回去
    return route.params
  }
}

接收

接收就是正常的props參數(shù)接收的方法 defineProps

<script lang="ts" setup namespace="Detail">
import { ref,toRefs} from 'vue'
import { useRoute } from 'vue-router'
let route = useRoute()
const props=defineProps({
  id: String,
  title: String,
  content: String
})
const {id,title,content}=toRefs(props)
</script>

編程式導(dǎo)航

路由的編程式導(dǎo)航是指通過(guò) JavaScript 代碼來(lái)控制頁(yè)面的導(dǎo)航,而不是通過(guò) <RouterLink> 組件。編程式導(dǎo)航提供了更大的靈活性,可以在特定條件下觸發(fā)導(dǎo)航操作,或者在導(dǎo)航前后執(zhí)行一些邏輯。

import {useRouter} from 'vue-router'
// 找到路由器
const router = useRouter()
 
function clickToRoute(name:string){
/*
    這里是路由器的兩種工作模式,push和replace選取自己需要的模式
    參數(shù)的話(huà)跟RouterLink的to寫(xiě)法是一樣的
    可以直接傳字符串路徑,也可以寫(xiě)對(duì)象....  
    支持傳參  
*/
    // router.replace('/demo')
    router.push({name:name})
}

以上就是vue3中路由寫(xiě)法與傳參方式的超詳細(xì)指南的詳細(xì)內(nèi)容,更多關(guān)于vue3路由寫(xiě)法與傳參方式的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • vue中nextTick函數(shù)和react類(lèi)似實(shí)現(xiàn)代碼

    vue中nextTick函數(shù)和react類(lèi)似實(shí)現(xiàn)代碼

    Vue 3 中的 nextTick 主要通過(guò) Promise 實(shí)現(xiàn)異步調(diào)度,返回一個(gè) Promise 對(duì)象,這篇文章主要介紹了vue中nextTick函數(shù)和react類(lèi)似實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2024-04-04
  • vue實(shí)現(xiàn)多級(jí)菜單效果

    vue實(shí)現(xiàn)多級(jí)菜單效果

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)多級(jí)菜單效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • vue路由--網(wǎng)站導(dǎo)航功能詳解

    vue路由--網(wǎng)站導(dǎo)航功能詳解

    這篇文章主要介紹了vue路由--網(wǎng)站導(dǎo)航功能詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Vue自定義指令詳解

    Vue自定義指令詳解

    這篇文章主要為大家詳細(xì)介紹了Vue自定義指令的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • vue2實(shí)現(xiàn)封裝動(dòng)態(tài)表單組件

    vue2實(shí)現(xiàn)封裝動(dòng)態(tài)表單組件

    這篇文章主要介紹了vue2實(shí)現(xiàn)封裝動(dòng)態(tài)表單組件,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-08-08
  • Vue3?<script?setup?lang=“ts“>?的基本使用

    Vue3?<script?setup?lang=“ts“>?的基本使用

    <script setup>?是在單文件組件 (SFC) 中使用?composition api?的編譯時(shí)語(yǔ)法糖,本文主要講解<script setup>?與?TypeScript?的基本使用,感興趣的朋友跟隨小編一起看看吧
    2022-12-12
  • vue封裝jquery修改自身及兄弟元素的方法

    vue封裝jquery修改自身及兄弟元素的方法

    本文主要介紹了vue封裝jquery修改自身及兄弟元素的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • vue 中引用gojs繪制E-R圖的方法示例

    vue 中引用gojs繪制E-R圖的方法示例

    這篇文章主要介紹了vue 中引用gojs繪制E-R圖的方法示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08
  • vue中axios實(shí)現(xiàn)數(shù)據(jù)交互與跨域問(wèn)題

    vue中axios實(shí)現(xiàn)數(shù)據(jù)交互與跨域問(wèn)題

    這篇文章主要介紹了vue中axios實(shí)現(xiàn)數(shù)據(jù)交互與跨域問(wèn)題,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2019-05-05
  • vue中數(shù)據(jù)不響應(yīng)的問(wèn)題及解決

    vue中數(shù)據(jù)不響應(yīng)的問(wèn)題及解決

    這篇文章主要介紹了vue中數(shù)據(jù)不響應(yīng)的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09

最新評(píng)論

中西区| 建始县| 马山县| 河北区| 钟祥市| 静安区| 周宁县| 仪陇县| 乃东县| 吐鲁番市| 东兰县| 稷山县| 武义县| 象山县| 庆元县| 黄梅县| 乌兰县| 伊春市| 安陆市| 上栗县| 安国市| 庆阳市| 岑溪市| 遂溪县| 南郑县| 托里县| 新晃| 安岳县| 册亨县| 高邮市| 丽江市| 楚雄市| 萍乡市| 勐海县| 通辽市| 台山市| 满城县| 中方县| 峨山| 柘城县| 安庆市|