Vue-router params 与 query 的区别及其参数的注意点

Vue-router params 与 query 的区别及其参数的注意点

router-link传参

<router-link :to="{name:'user',params:{userid:123}}">User</router-link>

params 与 query 的区别

  • query (查询) 相当于 ajax 中的 get 请求

  • /router1?id=123 
    //这里的id 叫做 query  ? 传参
    
  • query 要用path 来引入

  • this.$router.push({
    	path:'/'
    	query:{
    		id:123
    	}
    })
    

注意:params传参,push里面只能是 name:‘xxxx’,不能是path:’/xxx’,因为params只能用name来引入路由,如果这里写成了path,接收参数页面会是undefined!!!

params 有利于 seo

  • params (参数) 相当于ajax 中的 post 请求

  • /router/:id
    //这里的 id 叫做 params
    
  • params 要用 name 传入

  • this.$router.push({
    	name:'detail'
    	params:{
    		id:123
    	}
    })
    

    动态传参之坑

    注意:params 传参,push 里面只能是 name:‘xxxx’,不能是 path:’/xxx’,因为 params 只能用 name 来引入路由,如果这里写成了 path,接收参数页面会是 undefined!!!

    接收参数

  • query : this.$route.query.id

  • params : this.$router.params.id

  • 注意接收参数的时候,已经是 r o u t e route 而不是 router 了哦!!

    • $route(路线) 和 $router(路由器)的区别
      • $route 是 参数信息 $route为当前router跳转对象里面可以获取name、path、query、params等
      • r o u t e r V u e R o u t e r U R L 使 router为VueRouter实例,想要导航到不同URL,则使用 router.push方法 调取方法

vue.router中replace需要返回两次问题及解决方案

  • 问题:现有三个页面a , b , c , 递进关系,a页面router.push跳转至b,b再router.push跳转至c,c使用$router.replace()回到b,然后点击b页面的返回键,需要点击两次才能回到a页面

  • 需求:c保持router.replace至b方式不变,b页面返回键点击一次正常返回a页面

  • 解决方法:使用replace方法之后,再使用router.go(-1)方法返回一次就可以。

    例:
    this.router.replacePage({name:'b'})
    this.router.go(-1)
    

    原理:先解析一下几种页面跳转方式的不同

    • router.push : 跳转到新的页面,向history栈添加新一个新纪录,点击返回,返回到上一级页面。
    • router.replace: 打开新的页面,不会像history添加新纪录,而是直接替换掉当前记录。
    • router.go: 在history有记录的情况下,前进后退相应的页面。
      页面的跳转记录就是:a->b->c->b
      页面的堆栈记录则是:a->b->b
      那么返回的时候路线就是b->b->a,相当于b页面有两个,但由于b页面是一模一样的,所以视觉上是觉得点了两次返回键。
      那么解决的思路就很清晰了,减少history中的b的记录,就是在用b替换c页面记录同时,回退一页,记录就变成a->b,返回的时候自然是直接回到a。
发布了76 篇原创文章 · 获赞 6 · 访问量 3484

猜你喜欢

转载自blog.csdn.net/weixin_43550660/article/details/102969458
今日推荐