vue 之this.$router.replace和this.$router.push的区别
this.$router.push
1.跳转到指定URL,向history栈添加一个新的记录,点击后退会返回至上一个页面
2.声明式
编程式
router.push(...)//该方法的参数可以是一个字符串路径,或者一个描述地址的对象。
this.$router.push('/index') this.$router.push({path:'/index'}) this.$router.push({path:'/index',query:{name: '123'}}) this.$router.push({name:'index',params:{name:'123'}})
// 字符串
router.push('home') // 对象 this.$router.push({path: '/login?url=' + this.$route.path}); // 带查询参数,变成/backend/order?selected=2 this.$router.push({path: '/backend/order', query: {selected: "2"}}); // 命名的路由 router.push({ name: 'user', params: { userId: 123 }})this.$router.replace
1.跳转到指定URL,替换history栈中最后一个记录,点击后退会返回至上上一个页面 (A----->B----->C 结果B被C替换 A----->C) 2.设置 replace 属性(默认值: false)的话,当点击时,会调用 router.replace() 而不是 router.push(),于是导航后不会留下 history 记录。即使点击返回按钮也不会回到这个页面 加上replace: true后,它不会向 history 添加新记录,而是跟它的方法名一样 —— 替换掉当前的 history 记录。//声明式:// 编程式: router.replace(...) //push方法也可以传replace this.$router.push({path: '/home', replace: true})
两种传参方式
query: this.$router.push({ path: '/home', query: { site: [], bu: [] } }) params: this.$router.push({ name: 'Home', // 路由的名称 params: { site: [], bu: [] } }) params:/router1/:id ,/router1/123,/router1/789 ,这里的id叫做params query:/router1?id=123 ,/router1?id=456 ,这里的id叫做query。两者都可以传递参数,区别是什么? query 传参配置的是path,而params传参配置的是name,在params中配置path无效 query在路由配置不需要设置参数,而params必须设置 query传递的参数会显示在地址栏中 params传参刷新会无效,但是query会保存传递过来的值,刷新不变 ; 路由的配置
query:
{
path: '/home',
name: Home,
component: Home
}
params:
{
path: '/home/:site/:bu',
name: Home,
component: Home
}
created () {
let self = this
self.getParams()
},
watch () {
'$route': 'getParams'
},
methods: {
getParams () {
let site = this.$route.query.site
let bu = this.$route.query.bu
// 如果是params 传参,那就是this.$route.params.site
上面就可以获取到传递的参数了
}
注意:获取路由上面的参数,用的是$route,后面没有r
params是路由的一部分,必须要有。query是拼接在url后面的参数,没有也没关系。 |
params一旦设置在路由,params就是路由的一部分,如果这个路由有params传参,但是在跳转的时候没有传这个参数,会导致跳转失败或者页面会没有内容。 |
params、query不设置也可以传参,但是params不设置的时候,刷新页面或者返回参数会丢失,query并不会出现这种情况,这一点的在上面说过. |
this.$router.go(n)
1.类似window.history.go(n),向前或向后跳转n个页面,n可正(先后跳转)可负(向前跳转) 2.this.$router.go(1) //类似history.forward() this.$router.go(-1) //类似history.back() 最后总结: 路由传递参数和传统传递参数是一样的,命名路由类似表单提交而查询就是url传递: 1.命名路由搭配params,刷新页面参数会丢失 2.查询参数搭配query,刷新页面数据不会丢失 3.接收参数使用this.$router后面就是搭配路由的名称就能获取到参数的值