路由传参数

路由传参

1.query,字符串写法,对象写法

query参数直接路径后面?  加参数

 

<router-link to="/Student/Xinxi/Detail?id=666&title=你好啊">

        消息01 </router-link>

 

接收方,通过路由route,接收   可以使用插值语法   {{$route.query.xxx}}

 

但是得动态传递数据,这样数据是死的 id=666,title="你好啊"

所以:   ?key=value&key=value

 

 <router-link :to="`/Student/Xinxi/Detail?id=${m.id}&title=${m.name}`"> 
            <!--  :加了冒号全部当成js表达式来写   ``又变成字符串,但是模板字符串得里面混着js表达式所以${}  -->
        {{m.name}} </router-link> 

 

2.params参数,字符串,对象写法

parmas参数 直接路径/参数

 

      

params字符串写法

<router-link to="/Student/Xinxi/Detail/666/你好啊">

        消息01 </router-link>

 

但是这样写路由器不知道这个路由后面两个/666/你好啊是参数,所以在配置路由规则的时候

就得    在Xinxi(这个最后一级路由那里path添加占位符)

path: 'Xinxi/Detail/:id/:title'    这样路由器就知道后面两个是参数不是路由路径而是参数

params传参对象写法

 <router-link
          v-bind:to="{
              name:'Detail',
                params:{
                    id:m.id,
                    name:m.name
                }
            }"
          >
              {{m.name}}
          </router-link>

 

 

 

ps:注意这里params传参 得用name:"xxx"作为要跳转的组件的名字,不能写path:/xx/xx/ 

 

 

 

传参方式可划分为params传参和query传参,而params传参又可以分在url中显示参数,和不显示参数两种方式

1.params传参(显示参数),又可分为声明式,和编程两种方式

~声明式 router-link:该方式是通过router-link组件的to属性实现,子路由需要提前配置好参数

<router-link  to="/home/x">
跳转到子路由
</router-link>

{
path: '/child/:id',
component:Child
}

 

2.编程式 this.$router.push:同样需要子路由提前配置好参数。

{
path: '/child/:id',
component:Child
}
this.$router.push({
    path:'/child/${id}',
})

接收:this.$route.params.id 

2.params传参(不显示参数),也可以分为声明式,和编程式两种方式,与显示参数不同的是,这里是通过路由的别名 name 进行传值的

 

<router-link :to="{name:'Child',params:{id:1}}">跳转到子路由</router-link>


 

{
path: '/child',
name: 'Child',
component: Child
}

this.$router.push({
name:'Child',
params:{
id: 1
}
})

4.路由组件传递props数据方便路由组件接收

props传递数据为了方便接收路由组件(detail)接收,不用一直写$route.query.xxx或者

是$route.params.xxx,冗余,只需要在配置中写props:['xxx','xxx'],然后直接插值语法{{xxx}}就能用了

第一种写法:props值为对象,该对象中所有的key-value的组合最终都会通过props传给Detail组件

例如:   { component:Detail,props:{a:1,b:'hello'}      }

这样意思为给detail路由组件传递props参数,并且为对象,接收的话得在这个组件中

props:['a','b']接收

 

 

第二种写法:则把路由收到的所有的params参数通过props给Detail组件

props:ture

 

 意思为把接收过来的参数以props形式传给 Detail,如(id,title),

所以在Detail组件里可以这样接收 props:['id','title']

 

第三种写法:props值为函数,该函数返回的对象中的每一组key-value都会通过props传给Detail组件(可传query,params)

props:function($route){   //这是个回调函数,我们定义的我们不调用,由vue-router调用,并且传进来实参$route,我们以形参的形式接收???应该是这样理解
								return {
									id:$route.query.id,
									title:$route.query.title,
									a:1,
									b:'xxxxx'
								}
							}

 

router与route区别

1.router是VueRouter的一个对象,通过Vue.use(VueRouter)和VueRouter构造函数得到一个router的实例对象,这个对象中是一个全局的对象,包含了所有的路由,包含了许多关键的对象和属性,例如history对象,

$router.push({path:'/path'}),本质是向history栈中添加一个路由,在我们看来是切换路由,但本质是在添加一个histoty记录

$router.replace({path:'/path'}),替换路由,没有历史记录。

2.route是一个跳转的路由对象,每一个路由都会有一个route对象,是一个局部的对象,可以获取对应的name,path,params,query等。

$route.path 字符串,等于当前路由对象的路径,会被解析为绝对路径,如“/index/”

$route.params 对象,包含路由中的动态片段和全匹配片段的键值对

$route.query 对象,包含路由中查询参数的键值对,例如,对于/index?id=1,会得到$route.query.id == 1.

路由传参面试题

 

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

答:路由跳转传参的时候,对象的写法可以是,name、path形式,但是需要注意的是,path这种写法是不能与params参数一起使用的

 

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

   },
 

 

2.如何指定params参数可传可不传?

比如:配置路由传参的时候,站了位(params参数),但是路由跳转的时候就不传递,路径会出现问题

如果路由要求传递params参数,但是你就是不传递params参数,发现一件事情,url会有问题,

如何指定params参数可以传递,或者不传递,在配置路由的时候,在站位的后面加上一个问号

 

 {
            path: '/search/:keyword?',          /* 子路由提前配置好参数 */
            component: Search,
            meta:{show:true},
            name:'search'
        },

 

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

如:

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

 

使用undefined解决,params参数可以传递、不传递(空的字符串)

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

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在uni-app中,可以通过路由传递参给目标页面。有几种方式可以实现参传递的组合。 1. Query 参传递:可以通过在路由中添加 query 参来传递参。在跳转时可以使用 `uni.navigateTo` 或 `uni.redirectTo` 方法,并在 URL 后面拼接参。在目标页面中,可以使用 `this.$route.query` 获取传递的参。 示例: ```javascript // 跳转时传递参 uni.navigateTo({ url: '/pages/targetPage?param1=value1&param2=value2' }); // 目标页面中获取参 onLoad() { console.log(this.$route.query.param1); // 输出:value1 console.log(this.$route.query.param2); // 输出:value2 } ``` 2. Params 参传递:可以通过在路由中添加 params 参来传递参。在跳转时可以使用 `uni.navigateTo` 或 `uni.redirectTo` 方法,并在 URL 中以占位符的形式指定参。在目标页面中,可以使用 `this.$route.params` 获取传递的参。 示例: ```javascript // 跳转时传递参 uni.navigateTo({ url: '/pages/targetPage/param1/value1/param2/value2' }); // 目标页面中获取参 onLoad() { console.log(this.$route.params.param1); // 输出:value1 console.log(this.$route.params.param2); // 输出:value2 } ``` 3. Vuex 状态管理传递:如果要在多个页面之间传递参,并且希望参在整个应用中共享,可以使用 Vuex 进行状态管理。在发送页面中将参存储到 Vuex 中,在接收页面中从 Vuex 中获取参。 示例: ```javascript // 发送页面 this.$store.commit('SET_PARAM', { param1: 'value1', param2: 'value2' }); // 接收页面 onLoad() { console.log(this.$store.state.param1); // 输出:value1 console.log(this.$store.state.param2); // 输出:value2 } ``` 以上是uni-app中路由传递参的几种方式,你可以根据具体情况选择适合的方式来传递参

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值