vue路由传参

传参形式:

1.字符串形式

this.$router.push('/search/' + this.keyword + "?k=" + this.keyword.toUpperCase())

2.模板字符串形式

this.$router.push(`/search/${this.keyword}?k=${this.keyword.toUpperCase()}`)

3.对象形式:需要在路由中给对应路由中写name属性

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

对应路由中

  {
    path: "/search/:keyword",
    component: Search,
    meta: { show: true },
    name: "search",
  },

遇到的一些小问题:

Q1:路由传递参数(对象写法)时,path是否可以结合params参数一起使用?

this.$router.push({path: '/search',params: { keyword: this.keyword},query: {k:this.keyword})

不可以,路由跳转传参时,对象写法可以是name,path形式,但是path不可以与params一起使用,否则只能跳转并不能传参

Q2:如何指定params参数可传可不传,或是传递的是空串

如果路由要求传递params但是你却没有传,那么路由地址将会出现问题(比如跳转到search但是地址中没有search)

解决方法: 需要在router中对应路由中的要传递的params参数后面加上?

  {
                       //  ↓
    path: "/search/:keyword?",
    component: Search,
    meta: { show: true },
    name: "search",
  }

如果传递的是空串的话,也会出现上述问题

解决方法:使用undefined

this.$router.push({name: '/search', params: {keyword: this.keyword || undefined}, query: {k: this.keyword}})

Q3:路由组件能不能传递props数据

可以传递,有三种写法

布尔值写法:(只能传递params参数)  

    path: "/search/:keyword?",
    component: Search,
    meta: { show: true },
    name: "search",
    props: true

在要接收数据的组件中:props:['keyword']

对象写法:额外的给路由组件传递一些props

props:[a:1,b:2]  在对应组件中:props: ['a','b']

函数写法:可以将params参数,query参数通过props传递给路由组件

props:($route)=>{
    return {keyword:$route.params.keyword,k:$route.query.k}
}

并在对应组件中:  props:['keyword', 'k']

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值