路由傳參方式


一、路由的跳轉方式

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

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

  • params參數
  • query參數

2.1.params參數

1、動態路由時傳參

  • 屬於路徑當中的一部分,在配置路由的時候,需要占位。地址欄表現為 /search/v1
  • 刷新頁面,參數還在
//占位:
path:'/search/:keyword',

2、非動態路由時傳參

  • 不屬於路徑當中的一部分,類似 post請求,地址欄地址不變

  • 但是刷新參數數據會消失

  • params參數,跳轉路由需要用:name

 this.$router.push({
    name:'search',
    params:{
        keyword:this.keyword
    }
});

2.2.query參數

  • 不屬於路徑當中的一部分,類似於get請求,地址欄表現為 /search?k1=v1&k2=v2,不需要占位
  • 跳轉路由需要用:name或path都可以。網上說要用path,但是自己測試都可以。
this.$router.push({
    path:'/search',
    query:{
        k1:this.v1,
        k2:this.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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM