vue-router params无法传参的问题(路由传参)

代码纠正

由于搜索框(带params参数)与展示页面(带query参数)分布在两个组件,所以需要进行路由传参。但在实现过程中发现:通过搜索框从主页跳转至展示组件时能带上params参数,但在展示页面内输入搜索则无法再传递params参数。

原代码如下:(点击搜索调用goSearch函数)

    goSearch() {
        console.log(this.keyword)
      let location = {
        name: "Search",
        path:"/Search",
        params: {
          keyword: this.keyword || undefined,
        },
        query:this.$route.query
      };
      this.$router.push(location);

解决办法:将this.$router.push改为this.$router.replace

    goSearch() {
        console.log(this.keyword)
      let location = {
        name: "Search",
        path:"/Search",
        params: {
          keyword: this.keyword || undefined,
        },
        query:this.$route.query
      };
      this.$router.replace(location);

总结:push与repalce的区别

  1. 在vue.js中想要跳转到不同的 URL,需要使用 router.push 方法。这个方法会向 history 栈添加一个新的记录,当用户点击浏览器后退按钮时,则回到之前的 URL。(跳转同页面用replace,不同页面用push)

  2. 设置 replace 属性(默认值: false)的话,当点击时,会调用 router.replace() 而不是 router.push(),于是导航后不会留下 history 记录。即使点击返回按钮也不会回到这个页面。(replace无history,push有)

你可能感兴趣的:(前端,vue.js)