1. 程式人生 > 其它 >路由傳參方式

路由傳參方式

一、路由的跳轉方式

  • 宣告式導航:router-link,要有to屬性
  • 程式設計式導航 :$router.push|replace實現,可以處理一些業務

二、路由傳參,引數有幾種呢?

  • params引數
  • query引數

2.1.params引數

  • 屬於路徑當中的一部分,在配置路由的時候,需要佔位。位址列表現為 /search/v1/v2
//佔位:
path:'/search/:keyword',

2.2.query引數

  • 不屬於路徑當中的一部分,類似於get請求,位址列表現為 /search?k1=v1&k2=v2,不需要佔位

三、路由傳參

3.1.宣告式導航傳參

<router-link :to="'/search/'+keyword">搜尋</router-link>
<!--http://localhost:8080/search/hhh-->
<router-link :to="{path: '/search', name: 'search', params: { keyword: hhh } }">搜尋</router-link>

3.2.程式設計式導航

//1、字串形式  this.$router.push('/search/'+this.keyword+'?k='+this.keyword.toUpperCase());
//2、模板字串
this.$router.push(`/search/${this.keyword}?k=${this.keyword.toUpperCase()}`);
//3、物件(常用),傳的是物件,路由跳轉傳參params引數,需要路由配置檔案給路由命個名 ==>name:'search'
this.$router.push({
    name:'search',
    params:{
        keyword:this.keyword
    },
    query:{
        k:this.keyword.toUpperCase()
    }
});
//http://localhost:8080/search/hh?k=HH
  • 物件(常用):this.$router.push({name:“路由名字”,params:{傳參},query:{傳參})
  • 以物件方式傳參時,如果我們傳參中使用了params只能使用name,不能使用path,如果只是使用query傳參,可以使用path

3.3.props

//router/inex.js
{
    name: "search",
    path: "/search/:keyword?",
    component: Search,
    meta: {
    	show: true,
    },
    //1、布林值寫法,props只能傳params
    props:true
    //2、物件寫法,額外給路由自己傳遞一些props
    props:{
        a:1,
        b:2
    }
    //3、函式寫法,可以params引數、query引數,通過prop傳遞給路由元件(很少用)
    props:($route)=>{
        return{
            keyword:$route.params.keyword,
            k:$route.query.k
        }
    }
    props: ($route) => ({keyword: $route.params.keyword,k: $route.query.k,}),
},
//pages/Search/index.vue
//路由元件可以傳遞props
props:['keyword','a','b','k'],

四、路由傳參相關問題

1、路由傳遞引數(物件寫法)path是否可以結合params引數一起使用?

  • 路由跳轉傳參的時候,物件的寫法可以是name、path形式,但是path的寫法不可以和params引數一起使用。
  • (路徑引數缺失是無法匹配path裡面的佔位符)
  • 因此,不能,傳params-->物件寫法,是要name的寫法
this.$router.push({
    path:'/search',
    params:{keyword:this.keyword},
    query:{k:this.keyword.toUpperCase()}
});
//這個寫法,真實的是==>http://localhost:8080/#/search?k=HH
//正確路徑,應該的是:http://localhost:8080/#/search/hh?k=HH

2、如何指定params引數可以不傳?

問題場景:配置路由的時候,已經佔位了(params引數),但是路由跳轉的時候就不傳遞。

如何指定params可以傳遞或者不傳遞?

解決:

  • 配置路由時,可以在佔位符後面加個??代表可傳或不傳,正則的問號一次或多次】
//router/inex.js
{
    name:'search',
    path:'/search/:keyword?',
    component:Search,
}
this.$router.push({
    name:'search',
    // params:{keyword:this.keyword},
    query:{k:this.keyword.toUpperCase()}
});
//真實路徑:http://localhost:8080/#/search?k=HHH

3、params引數可以傳遞可以不傳遞,但是如果傳遞為空字串,如何解決?

//使用undefined解決:params引數可以傳遞,或不傳遞(傳空字串)
this.$router.push({
    name: "search",
    params: { keyword: ""||undefined },
    query: { k: this.keyword.toUpperCase() },
});

4、路由元件能不能傳遞props資料

  • 可以,見3.4

作者:黃哈哈。

原文連結:https://www.cnblogs.com/jiajia-hjj/p/15814297.html

本部落格大多為學習筆記或讀書筆記,本文如對您有幫助,還請多推薦下此文,如有錯誤歡迎指正。