国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服務器之家 - 編程語言 - JavaScript - vue.js - 詳解Vue 路由組件傳參的 8 種方式

詳解Vue 路由組件傳參的 8 種方式

2022-02-16 17:13segmentfault vue.js

這篇文章主要介紹了Vue 路由組件傳參的 8 種方式,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

我們在開發(fā)單頁面應用時,有時需要進入某個路由后基于參數(shù)從服務器獲取數(shù)據(jù),那么我們首先要獲取路由傳遞過來的參數(shù),從而完成服務器請求,所以,我們需要了解路由傳參的幾種方式,以下方式同 vue-router@4

編程式路由傳參

除了使用 <router-link> 創(chuàng)建 a 標簽來定義導航鏈接,我們還可以借助 router 的實例方法,通過編寫代碼來實現(xiàn)。

1. 通過 params 傳遞

 路由配置

路徑參數(shù) 用冒號 : 表示。

?
1
2
3
4
const routes = [
 // 動態(tài)段以冒號開始
 { path: 'details/:id', name: "details", component: Details },
]

router.push() 方法的參數(shù)可以是一個字符串路徑,或者一個描述地址的對象。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
const Home = {
 template: '<div @click="toDetails">To Details</div>',
 metheds: {
  toDetails() {
   // 字符串路徑
   this.$router.push('/details/001')
   // 帶有路徑的對象
   this.$router.push({path: '/details/001'})
   // 命名路由,路由配置時,需要 name 字段
   this.$router.push({ name: 'details', params: { id: '001' } })
  }
 }
}

注意,如果提供了 pathparams 會被忽略:

?
1
2
// `params` 不能與 `path` 一起使用
router.push({ path: '/details', params: { id: '001' } }) // -> /details

組件獲取數(shù)據(jù)

當一個路由被匹配時,它的 params 的值將在每個組件中以 this.$route.params 的形式暴露出來。

?
1
2
3
4
5
6
7
8
9
10
11
12
const Details = {
 template: '<div>Details {{ $route.params.id }} </div>',
 created() {
  // 監(jiān)聽路由變化
  this.$watch(
   () => this.$route.params,
   (toParams, previousParams) => {
    // 對路由變化做出響應...
   }
  )
 },
}

2. 通過 query 傳遞

這種情況下 query (查詢參數(shù))傳遞的參數(shù)會顯示在 url 后面,如: /details/001?kind=car

路由配置

使用 query 時,以下三種方式都是可行的:

?
1
2
3
this.$router.push('/details/001?kind=car')
this.$router.push({ path: '/details/001', query: { kind: "car" }})
this.$router.push({ name: 'details', params: { id: '001' }, query: { kind: 'car' }})

組件獲取數(shù)據(jù)

組件通過 $route.query 獲取:

?
1
2
3
4
5
6
7
8
9
10
11
12
const Details = {
 template: '<div>Details {{ $route.query.kind }} </div>',
 created() {
  // 監(jiān)聽路由變化
  this.$watch(
   () => this.$route.query,
   (toParams, previousParams) => {
    // 對路由變化做出響應...
   }
  )
 },
}

要對同一個組件中參數(shù)的變化做出響應的話,你可以簡單地 watch $route 對象上的任意屬性,在這個場景中,就是 $route.query

3. 通過 hash 傳遞

通過此方式,url 路徑中帶有 hash ,例如: /details/001#car

路由配置

使用 hash 時,以下三種方式都是可行的(同 query ):

?
1
2
3
this.$router.push('/details/001#car')
this.$router.push({ path: '/details/001', hash: '#car'})
this.$router.push({ name: 'details', params: { id: '001' }, hash: 'car'})

組件獲取數(shù)據(jù)

組件通過 $route.hash.slice(1) 獲取:

?
1
2
3
const Details = {
 template: '<div>Details {{ $route.hash.slice(1) }} </div>',
}

通過 props 進行傳遞

在組件中使用 $route 會與路由緊密耦合,這限制了組件的靈活性,因為它只能用于特定的 URL。雖然這不一定是件壞事,但我們可以通過 props 配置來解除這種行為。

以解耦的方式使用 props 進行參數(shù)傳遞,主要是在路由配置中進行操作。

1. 布爾模式

props 設置為 true 時, route.params 將被設置為組件的 props。

例如下面的代碼是通過 $route 的方式獲取動態(tài)字段 id

?
1
2
3
4
const User = {
 template: '<div>User {{ $route.params.id }}</div>'
}
const routes = [{ path: '/user/:id', component: User }]

將上面的代碼替換成 props 的形式,如下:

?
1
2
3
4
5
6
const User = {
 props: ['id'], // 組件中通過 props 獲取 id
 template: '<div>User {{ id }}</div>'
}
// 路由配置中,增加 props 字段,并將值 設置為 true
const routes = [{ path: '/user/:id', component: User, props: true }]

注意:對于有命名視圖的路由,你必須為每個命名視圖定義 props 配置:

?
1
2
3
4
5
6
7
8
const routes = [
 {
  path: '/user/:id',
  components: { default: User, sidebar: Sidebar },
  // 為 User 提供 props
  props: { default: true, sidebar: false }
 }
]

2. 對象模式

props 是一個對象時,它將原樣設置為組件 props。當 props 是靜態(tài)的時候很有用。

路由配置

?
1
2
3
4
5
6
7
const routes = [
 {
  path: '/hello',
  component: Hello,
  props: { name: 'World' }
 }
]

組件中獲取數(shù)據(jù)

?
1
2
3
4
5
6
7
8
9
const Hello = {
 props: {
  name: {
   type: String,
   default: 'Vue'
  }
 },
 template: '<div> Hello {{ name }}</div>'
}

<Hello /> 組件默認顯示 Hello Vue,但路由配置了 props 對象,當路由跳轉到 /hello 時,會顯示傳遞過來的 name , 頁面會顯示為 Hello World。

3. 函數(shù)模式

可以創(chuàng)建一個返回 props 的函數(shù)。這允許你將參數(shù)轉換為其他類型,將靜態(tài)值與基于路由的值相結合等等。

路由配置

使用函數(shù)模式時,返回 props 的函數(shù)接受的參數(shù)為路由記錄 route

?
1
2
3
4
5
6
7
8
9
10
11
// 創(chuàng)建一個返回 props 的函數(shù)
const dynamicPropsFn = (route) => {
 return { name: route.query.say + "!" }
}
const routes = [
 {
  path: '/hello',
  component: Hello,
  props: dynamicPropsFn
 }
]

組件獲取數(shù)據(jù)

當 URL 為 /hello?say=World 時, 將傳遞 {name: 'World!'} 作為 props 傳給 Hello 組件。

?
1
2
3
4
5
6
7
8
9
const Hello = {
 props: {
  name: {
   type: String,
   default: 'Vue'
  }
 },
 template: '<div> Hello {{ name }}</div>'
}

此時頁面將渲染:

詳解Vue 路由組件傳參的 8 種方式

注意:請盡可能保持 props 函數(shù)為無狀態(tài)的,因為它只會在路由發(fā)生變化時起作用。如果你需要狀態(tài)來定義 props,請使用包裝組件,這樣 vue 才可以對狀態(tài)變化做出反應。

其他方式

1. 通過 Vuex 進行傳遞

1. store 存儲狀態(tài);
    2. A 組件更改 store 中的狀態(tài);
    3. B 組件從 store 中獲取。

2. 通過前端本地存儲等方式

1. Local Storage;
    2. Session Storage;
    3. IndexedDB;
    4. Web SQL;
    5. Cookies。

到此這篇關于Vue 路由組件傳參的 8 種方式的文章就介紹到這了,更多相關Vue 路由組件傳參內容請搜索服務器之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://segmentfault.com/a/1190000039398462

延伸 · 閱讀

精彩推薦
  • vue.jsVue2.x 項目性能優(yōu)化之代碼優(yōu)化的實現(xiàn)

    Vue2.x 項目性能優(yōu)化之代碼優(yōu)化的實現(xiàn)

    這篇文章主要介紹了Vue2.x 項目性能優(yōu)化之代碼優(yōu)化的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋...

    優(yōu)小U9632022-02-21
  • vue.jsVue2.x-使用防抖以及節(jié)流的示例

    Vue2.x-使用防抖以及節(jié)流的示例

    這篇文章主要介紹了Vue2.x-使用防抖以及節(jié)流的示例,幫助大家更好的理解和學習使用vue框架,感興趣的朋友可以了解下...

    Kyara6372022-01-25
  • vue.jsVue項目中實現(xiàn)帶參跳轉功能

    Vue項目中實現(xiàn)帶參跳轉功能

    最近做了一個手機端系統(tǒng),其中遇到了父頁面需要攜帶參數(shù)跳轉至子頁面的問題,現(xiàn)已解決,下面分享一下實現(xiàn)過程,感興趣的朋友一起看看吧...

    YiluRen丶4302022-03-03
  • vue.jsVue中引入svg圖標的兩種方式

    Vue中引入svg圖標的兩種方式

    這篇文章主要給大家介紹了關于Vue中引入svg圖標的兩種方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的...

    十里不故夢10222021-12-31
  • vue.js用vite搭建vue3應用的實現(xiàn)方法

    用vite搭建vue3應用的實現(xiàn)方法

    這篇文章主要介紹了用vite搭建vue3應用的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下...

    Asiter7912022-01-22
  • vue.js詳解vue 表單綁定與組件

    詳解vue 表單綁定與組件

    這篇文章主要介紹了vue 表單綁定與組件的相關資料,幫助大家更好的理解和學習使用vue框架,感興趣的朋友可以了解下...

    Latteitcjz6432022-02-12
  • vue.jsVue多選列表組件深入詳解

    Vue多選列表組件深入詳解

    這篇文章主要介紹了Vue多選列表組件深入詳解,這個是vue的基本組件,有需要的同學可以研究下...

    yukiwu6752022-01-25
  • vue.js梳理一下vue中的生命周期

    梳理一下vue中的生命周期

    看過很多人講vue的生命周期,但總是被繞的云里霧里,尤其是自學的同學,可能js的基礎也不是太牢固,聽起來更是吃力,那我就已個人之淺見,以大白話...

    CRMEB技術團隊7992021-12-22
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 国产黄色美女 | 玖玖玖视频 | 免费一级毛片免费播放 | 色吧av| 97精品一区二区 | 午夜私人影院 | 一区二区三区成人 | 小川阿佐美88av在线播放 | 亚洲九九 | 亚洲国产精品一二三区 | 色婷婷蜜桃 | 欧美日韩激情 | 亚洲精品乱码久久久久久金桔影视 | 午夜欧美精品久久久久 | 91网站入口 | 久久午夜剧场 | 午夜影院黄色 | 好看的一级毛片 | 毛片在线网址 | 国产精品久久久久久久9999 | 色视频在线看 | 在线视频 91 | av国产精品 | 亚洲依人| 久久精品国产一区二区三区不卡 | 亚洲第一视频 | 一级视频在线播放 | 国产精品永久免费视频 | 午夜av影视 | 欧美日韩视频 | 午夜精品网站 | 日韩av免费在线观看 | 91精品国产综合久久久久久 | 中国黄色毛片 大片 | 一区久久| 国产欧美日韩综合精品一区二区 | 欧美一区二区三区精品 | 久久久网 | 国产成人精品久久二区二区 | 日本a在线| 精品久久久久久久久久久下田 |