vue-route4参数的传递
传参主要有两种方式,params和query,用params传参,F5强制刷新参数会被清空,用query,由于参数适用路径传参的所以F5强制刷新也不会被清空。(传参强烈建议适用string)
配置路径rutes
import { createRouter, createWebHashHistory } from 'vue-router';
import TestVueRouter from '../components/TestVueRouter/TestVueRouter;
import TestVueRouterTo from '../components/TestVueRouterTo/TestVueRouterTo;
const router = createRouter({
  history: createWebHashHistory(),
  routes: [
    {
      path: '/testVueRouter',
      name: 'TestVueRouter',
      component: TestVueRouter
    },
    {
      path: '/testVueRouterTo',
     // 一定要写name,params必须用name来识别路径
      name: 'TestVueRouterTo',
      component: TestVueRouterTo
    }
  ]
});
export default router;params传递参数
传递参数页
<!-- 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>接收传递过来的参数,用$route,少个r,注意啦
http://localhost:8080/#testVueRouterTo F5强制刷新 数据会丢失
<!-- 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传递参数
传递参数页
<!-- 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>接受参数
<!-- 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>使用query,那么在浏览器地址栏的链接就是http://localhost:8080/#testVueRouterTo?page=1&code=8989,使用F5强制刷新依然可以获取数据。
query与params传参机制不一样,如果要隐藏参数用params,如果强制刷新不被清除用query
获取路由参数和检测参数值是否存在
组件检测参数值是否存在,不存在则返回上一个组件
created() {
    // 如果传递的参数是空那么返回主页
    if (!this.$route.query.page) {
      this.$router.push('/test-vue-router');
      return;
    }
},同样的获取当前页面路由的参数:
this.$route.query.xxx
或者
this.$route.param.xxx在控制台打印this.$route结果如下(示例):
{
fullPath: "/detail?target=http://www.qdxin.cn/xin/2018/144624.html",
path: "/detail", 
query: {target: 'http://www.qdxin.cn/xin/2018/144624.html'}, 
hash: "", 
name: "detail",
 …
} 
                     
                     
                     
                     
                     
                     
                     
             
             
             目录
        目录