vue-router路由传参

tip: 用 params 传参,F5 强制刷新参数会被清空,用 query,由于参数适用路径传参的所以 F5 强制刷新也不会被清空。传参强烈建议适用 string

也可以选用 sessionstorage/localstorage/cookie 存储,可以参考我的另一边文章:sessionstorage、localstorage 与 cookie

params: 参数不会显示到路径上

1:配置路径 rutes

export default new Router({
  routes: [
    {
      path: '/testVueRouter',
      name: 'TestVueRouter',
      component: TestVueRouter
    },
    {
      path: '/testVueRouterTo',
     // 一定要写 name,params 必须用 name 来识别路径
      name: 'TestVueRouterTo',
      component: TestVueRouterTo
    }
  ]
})

2:传递参数:用$router

<!-- test-vue-router 页面 -->
<template>
  <div>
    <a @click="routerTo()">query 传参</a>
  </div>
</template>
<script>
export default {
  methods: {routerTo() {
      this.$router.push({
        name: `TestVueRouterTo`,
        params: {
          page: '1', code: '8989'
        }
      })}}
}
</script>

3:接受参数:用$route,少个 r, 注意啦

<!-- test-vue-router-to 页面 -->
<template>
  <div>
  </div>
</template>
<script>
export default{data() {
    return {
      page: '',
      code: ''
    }
  },
  created() {
    this.getRouterData() },
  methods: {getRouterData() {
      this.page = this.$route.params.page
      this.code = this.$route.params.code
      console.log('page', this.page)
      console.log('code', this.code) }

}
}
</script>

query:最好也用 name 来识别,保持与 params 一致性,好记了,路径传参

1:路径配置(跟 params 一样,代码不写了)

2:传递参数页

<!-- test-vue-router 页面 -->
<template>
  <div>
    <a @click="routerTo()">query 传参</a>
  </div>
</template>
<script>
export default {
  methods: {routerTo() {
      this.$router.push({
        name: `TestVueRouterTo`,
     // 只是把 query 改了,其他都没变 query: { page:
'1', code: '8989' } })}} } </script>

3:接受参数

<!-- test-vue-router-to 页面 -->
<template>
  <div>
  </div>
</template>
<script>
export default{data() {
    return {
      page: '',
      code: ''
    }
  },
  created() {
    this.getRouterData() },
  methods: {getRouterData() {
      // 只是改了 query,其他都不变
      this.page = this.$route.query.page
      this.code = this.$route.query.code
      console.log('page', this.page)
      console.log('code', this.code) }

}
}
</script>

图片区:

下面我们采用 path: '/testVueRouterTo'

1:query(成功)

<!-- test-vue-router 页面 -->
<template>
  <div>
    <a @click="routerTo()">query 传参</a>
  </div>
</template>
<script>
export default {
  methods: {routerTo() {
      this.$router.push({
        path: '/testVueRouterTo',
        query: {
          page: '1', code: '8989'
        }
      })}}
}
</script>
<!-- test-vue-router-to 页面 -->
<template>
  <div>
<!--     <span>{{page}}</span>
    <span v-show="code ==='89'">{{code}}</span>
    <span>{{password}}</span> -->
  </div>
</template>
<script>
export default{data() {
    return {
      page: '',
      code: '',
      password: ''
    }
  },
  created() {
    this.getRouterData() },
  methods: {getRouterData() {
      // debugger
      this.page = this.$route.query.page
      this.code = this.$route.query.code
      console.log('page', this.page)
      console.log('code', this.code) }

}
}
</script>

2:params:(不成功)

<!-- test-vue-router 页面 -->
<template>
  <div>
    <a @click="routerTo()">params 传参</a>
  </div>
</template>
<script>
export default {
  methods: {routerTo() {
      this.$router.push({
        path: '/testVueRouterTo',
        params: {
          page: '1', code: '8989'
        }
      })}}
}
</script>
<!-- test-vue-router-to 页面 -->
<template>
  <div>
<!--     <span>{{page}}</span>
    <span v-show="code ==='89'">{{code}}</span>
    <span>{{password}}</span> -->
  </div>
</template>
<script>
export default{data() {
    return {
      page: '',
      code: '',
      password: ''
    }
  },
  created() {
    this.getRouterData() },
  methods: {getRouterData() {
      // debugger
      this.page = this.$route.params.page
      this.code = this.$route.params.code
      console.log('page', this.page)
      console.log('code', this.code) }

}
}
</script>

这是由于 query 与 params 传参机制不一样,造成的差异,如果要隐藏参数用 params,如果强制刷新不被清除用 query