首頁 > 軟體

Vue路由傳參及props解耦深入分析

2022-07-30 14:00:03

關於路由傳參的幾種方式,眾說紛紜。今天來總結下路由傳參的幾種方式與路由解耦:

一、路由傳參

路由傳參總的來說有兩種方式,query和params,配合宣告式導航與程式設計式導航,各有不同的幾種寫法;

query傳參

query配合宣告式導航

//路由設定
 {
    path: '/a01',
    name: 'a01',
    component: a01
  }
//傳參方式1--通過url拼接,使用?分割
 <router-link to="/a01?data=a01">a01</router-link>
 //傳參方式2--傳入物件
<router-link :to="{ path: '/a01', query: { data: 'a01' } }">a02</router-link>

query配合程式設計式導航

路由設定方式不變;

//繫結事件
<span @click="btn('/a01', 'a01')">b01</span>
//處理路由方式1,通過path配合query
 btn(path, data) {
      this.$router.push({
        path,
        query: {
          data,
        },
      });
    },
 //處理路由方式2,通過name配合query
    btn1(name, data) {
      this.$router.push({
        name,
        query: {
          data,
        },
      });
    },

query傳參的特點

1.引數在url中展現,使用?分割。屬性和值以鍵值對形式存在

2.子元件通過$route.query.xxx方式獲取引數(xxx為自己定義的引數名)

params傳參

params傳參分為兩種情況,路徑佔位與不佔位

路徑使用引數佔位時

params配合宣告式導航:

//路由宣告需要使用‘:'佔位
{
    path: '/a02/:data',
    name: 'a02',
    component: a02
  }
//傳參方式1--url拼接,不需要?分割
<router-link to="/a02/a02">a02</router-link>
//傳參方式2--傳物件
<router-link :to="{ path: '/a02/a02' }">a02.1</router-link>

params配合程式設計式導航:

  btn1(name, data) {
      this.$router.push({
        name,
        params: {
          data,
        },
      });
    },

params傳參配合路徑佔位的特點:

1.引數在url中展現,沒有?=等額外標籤

2.子元件以$route.params.xxx方式獲取引數(xxx為自己定義的引數名)

路徑不使用佔位時

宣告式導航

<router-link :to="{ name:'a02',params:{data:'a02'} }">a02.1</router-link>

注意!!需要使用name,不可以使用path,官網解釋如下:

注意:如果提供了 path,params 會被忽略,你需要提供路由的 name 或手寫完整的帶有引數的 path

程式設計式導航

//路由設定
{
    path: '/a03',
    name: 'a03',
    component: a03
  }
  //路由跳轉
 <span @click="btn3('a03', 'a03')">b04</span>
 btn3(name, data) {
      this.$router.push({
        name,
        params: {
          data,
        },
      });
    },

params傳參佔位的特點:

1.引數在不在url體現

2.重新整理後資料丟失

二、props解耦

vue的元件是可以複用的,但是路由給子元件傳值後,通過$route獲取引數會導致子元件無法複用,解決這個問題,需要用到props解耦;

1.props布林值

具體使用:

1.在路由設定時使用props

{
    path: '/a02/:data',
    name: 'a02',
    component: a02,
    //使用props傳參
    props: true
  }

2.父元件傳參,沒有變化

3.子元件使用props接收

<template>
  <p>{{ data }}</p>
</template>
<script>
export default {
  props: {
    data: {
      type: String,
    },
  },
};
</script>

props為布林值 true 開啟props接收,false關閉。

上例我們演示的就是這樣的情況,但是,props為布林值時,只適用於params傳參,對query不適用;

2.props函數模式

props設定為函數,可以獲取query方式的傳值,通過route.query.xxx方式

//設定
 {
    path: '/a01',
    name: 'a01',
    component: a01,
    props: (route) => ({ data: route.query.data })
  }
//傳參--與query一致
<router-link to="/a01?data=a01">a01</router-link>
//接收
<template>
  <p>{{ data }}</p>
</template>
<script>
export default {
  props: {
    data: {
      type: String,
    },
  },
};
</script>

3.props物件模式

props物件模式直接傳遞固定值,不需要再傳參;

//設定
 {
    path: '/a01',
    name: 'a01',
    component: a01,
    props: {data:'123'}
  }

以上,為本次分享全部內容,如有錯誤,歡迎隨時私信指正,不勝感激。

到此這篇關於Vue路由傳參及props解耦深入分析的文章就介紹到這了,更多相關Vue路由傳參內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com