一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

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

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 種方式,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

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

編程式路由傳參

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

1. 通過 params 傳遞

 路由配置

路徑參數 用冒號 : 表示。

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

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

?
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

組件獲取數據

當一個路由被匹配時,它的 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() {
  // 監聽路由變化
  this.$watch(
   () => this.$route.params,
   (toParams, previousParams) => {
    // 對路由變化做出響應...
   }
  )
 },
}

2. 通過 query 傳遞

這種情況下 query (查詢參數)傳遞的參數會顯示在 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' }})

組件獲取數據

組件通過 $route.query 獲取:

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

要對同一個組件中參數的變化做出響應的話,你可以簡單地 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'})

組件獲取數據

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

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

通過 props 進行傳遞

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

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

1. 布爾模式

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

例如下面的代碼是通過 $route 的方式獲取動態字段 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 是靜態的時候很有用。

路由配置

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

組件中獲取數據

?
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. 函數模式

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

路由配置

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

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

組件獲取數據

當 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 函數為無狀態的,因為它只會在路由發生變化時起作用。如果你需要狀態來定義 props,請使用包裝組件,這樣 vue 才可以對狀態變化做出反應。

其他方式

1. 通過 Vuex 進行傳遞

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

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

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

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

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

延伸 · 閱讀

精彩推薦
  • vue.jsVue2.x 項目性能優化之代碼優化的實現

    Vue2.x 項目性能優化之代碼優化的實現

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

    優小U9632022-02-21
  • vue.jsVue2.x-使用防抖以及節流的示例

    Vue2.x-使用防抖以及節流的示例

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

    Kyara6372022-01-25
  • vue.jsVue項目中實現帶參跳轉功能

    Vue項目中實現帶參跳轉功能

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

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

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

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

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

    用vite搭建vue3應用的實現方法

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

    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
主站蜘蛛池模板: 91视在线国内在线播放酒店 | 色先锋av资源中文字幕 | 成人免费网站视频ww | 香蕉动漫库 | 亚洲国产精品综合久久网络 | 欧美成人乱弄视频 | 欧美高清在线不卡免费观看 | www.毛片网站 | 黑人女性猛交xxxxxⅹxx | 丝瓜污污| 性绞姿始动作动态图 | 欧美在线一 | 国产欧美日韩一区二区三区在线 | 欧美午夜视频一区二区 | 久久久久嫩草影院精品 | 厨房里摸着乳丰满在线观看 | 情缘免费观看完整版 | 亚洲国产成人久久精品影视 | 农村妇女野外牲交一级毛片 | 成人免费播放 | 荡女人人爱全文免费阅读 | jux539原千岁在线播放 | 国产高清精品自在久久 | 国产一级在线观看视频 | 福利一区三区 | 水多多凹凸福利视频导航 | 日本中文字幕黑人借宿影片 | 五月婷婷丁香色 | 继的朋友无遮漫画免费观看73 | 王的视频视ivk | 小苹果日本在线观看 | 日本www视频在线观看 | 成年人视频在线播放 | 高清欧美不卡一区二区三区 | 激情三级做爰在线观看激情 | jj视频免费观看 | 我被男人下药添得好爽 | 91久久99热青草国产 | 肉文小说 | 2021国产精品成人免费视频 | 激情视频激情小说 |