params/query传参

文章详细介绍了Vue.js中路由传参的三种方式,包括params和query的区别。params通过name属性引入路由,不会显示在地址栏,而query会显示并随URL变化。刷新页面时,query参数保留,params参数丢失。还讨论了如何处理params参数可传可不传的情况以及在组件中通过props传递数据的方法。
摘要由CSDN通过智能技术生成

一、路由传参

params参数:属于路由中的一部分,在配置路由的时候,必须占位 在下面一个代码就是占位

query参数:不属于路由当中的一部分,类似于ajax中的queryString(/home?a=1&b=2)

    //第一种:字符串形式
    this.$router.push("/search/" + this.keyword + "?k=" + this.keyword.toUpperCase());
    //第二种:模板字符串
    this.$router.push(`/search/${this.keyword}?k=${ this.keyword.toUpperCase()}`);
    //第三种:对象
    this.$router.push({
        name:"search",
        params:{keyword:this.keyword},
        query:{k:this.keyword.toUpperCase()}
    })
    /*
        注意:使用对象形式配合params传参时,必须使用name属性,不能使用path属性
             name 是配置路由时给 path 取的别名,方便使用
             
        $router : 是路由操作对象,只写对象
        $route : 路由信息对象,只读对象
    */

params和query区别:

1.query可以通过name属性或者path属性来引入路由,而params只能通过name属性来引入路由;在使用params传递时如果指定了path属性而没有name属性,那么界面能成功跳转但是不能接受到传递过来的参数 2.query传递参数时会地址栏会发生改变,传递参数会携带在路径中,而params则不会 3.在刷新界面时,query传递的参数不会丢失,而params会丢失
params相对于query的优点就是传的参数不会在地址上显示

二、路由传参相关题

1.如何指定params参数可传可不传

在配置路由的时候,在占位的后面加上一个?即可

export default {
    routes:[
        {
            path:'/search/:keyword?'
        }
    ]
}

2.params参数可以传递也可以不传递,但如果传递的是空串,如何解决?

//使用undefined解决
this.$router.push({
        name:"search",
        params:{keyword:"" || undefined}, //当传递为空串时候,加个undefined
        query:{k:this.keyword.toUpperCase()}
    })

3.路由组件能不能传递props数据?

是传递props数据,以props形式接受,不是将父传子数据传给路由的意思

优点:在获取时对应的组件中使用方便不用$route.query/params.属性名获取值

  • search组件中

 

export default {
    routes:[
        {
            path:'/search/:keyword?'
​
                //第一种:布尔值写法(只准传params参数,不准传query参数)
                props:true 
                //第二种:对象写法
                props:{a:1,b:2}
                //第三种:函数写法(可以传params、query参数)
                props:($route) => {
                    return {
                        //获取到$route的数据
                        keyword:$route.params.keyword,
                        k:$route.query.k
                    }
                }
              
        }
    ]
}
   search组件中
   <h1>{{变量名}}</h1>
  //传递参数后同时也要在相关组件接收 这里的组件是search
   props:['变量名']

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值