web前端之vue路由传参、接收方式、跳转、router-link、replace、params、name、router、query、path、push、to
传递// query通过path切换路由<router-link :to="{path: 'Detail', query: { id: 1 }}">前往Detail页面</router-link>// params通过name切换路由<router-link :to="{name: 'Detail', params: { id: 1 }}">前往Detail页面
MENU
1、router-link(声明式)
1.1、不带参数
name
,path
都行,建议用name
。
注意:router-link
中链接如果是斜杠/
开始,那么就是从根路由开始,如果开始不带斜杠/
,则从当前路由开始。<router-link :to="{ path: '/home' }"></router-link> <router-link :to="{ name: 'home' }"></router-link>
1.2、携带参数
query
传参数类似于get
请求,url
后面会显示参数,可以不配置路由。
params
传参数类似于post
请求,路由配置path: "/home/:id"
或者path: "/home:id"
。不配置path
,第一次可请求,刷新页面id会消失,配置path
,刷新页面id会保留。<router-link :to="{ path: 'Detail', query: { id: 1 } }">前往Detail页面</router-link> <router-link :to="{ name: 'Detail', params: { id: 2 } }">前往Detail页面</router-link>
html取参
$route.query.id
$route.params.id
script取参
this.$route.query.id
this.$route.params.id
2、API(编程式或命令式)
2.1、this.$router.push()
2.1.1、不带参数
this.$router.push('/home');
this.$router.push({ path: '/home' });
this.$router.push({ name: 'home' });
2.1.2、query传参
this.$router.push({ path: '/home', query: { id: '1' } }); this.$router.push({ name: 'home', query: { id: '1' } });
html获取参数
this.$route.query.id
script获取参数
this.$route.query.id
2.1.3、params传参
路由配置
path: "/home/:id"
或者path: "/home:id"
,不配置path
,第一次可请求,刷新页面id
会消失;配置path
,刷新页面id会保留。只能用name
。
query
和params
区别
query
类似get
请求,跳转之后页面url后面会拼接参数,类似?id=1
,非重要性的可以这样传,刷新页面id
会保留。
params
类似post
请求,跳转之后页面url后面不会拼接参数,但是刷新页面id
会消失。this.$router.push({ name: 'home', params: { id: '1' } });
2.2、this.$router.replace()
用法与
push
相同。
2.3、this.$router.go(n)
this.$router.go(n);
2.4、三者的区别
this.$router.push
跳转到指定url路径,并向history栈中添加一个记录,点击后退会返回到上一个页面。
this.$router.replace
跳转到指定url路径,但是history栈中不会有记录,点击返回会跳转到上上个页面,就是直接替换了当前页面。
this.$router.go(n)
向前或者向后跳转n个页面,n可为正整数或负整数。
3、配置路由
3.1、路径传参(参数就是路径的一部分,可变的路径)
html
<div @click="skips(1)">查看详情</div>
JavaScript
methods: {
skips(id) {
// 直接调用$router.push实现携带参数的跳转
this.$router.push({
path: `/details/${id}`
});
// this.$router.push(
// `/monitor/service-record?serviceName=${this.query.serviceName}`
// );
}
}
路由配置
{
path: '/details/:id',
component: details
}
接收
this.$route.params.id
3.2、name和params
解析
通过路由属性中的name来确定匹配的路由,通过params来传递参数。页面刷新,数据会丢失。
html
<div @click="skips(2)">查看详情</div>
JavaScript
methods: {
skips(id) {
this.$router.push({
name: 'details',
params: { id }
});
}
}
路由配置
{
name: 'details',
component: details
}
接收
this.$route.params.id
3.3、path和query
解析
使用path来匹配路由,然后通过query来传递参数,query传递的参数会显示在url后面?id=××。页面刷新,数据会丢失。
html
<div @click="skips(3)">查看详情</div>
JavaScript
methods:{
skips(id) {
this.$router.push({
path: '/details',
query: { id }
})
}
}
路由配置
{
path: '/details',
name: 'details',
component: details
}
接收
this.$route.query.id
注意:在组件中获取参数的时候使用
route.params
而不是router
这很重要。
4、相关链接
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)