不跟你多BB,直接开始敲

  • 先创建两个页面(其实就是vue create 命令默认创建的项目更改了一下)

在这里插入图片描述

  • 看一下页面效果

在这里插入图片描述

  • 给商店页面添加一些商品
<ul>
  <li v-for="item in list" :key="item.id">
    {{ item.name }}
  </li>
</ul>
<script>
export default {
  name: "Home",
  data() {
    return {
      list: [
        { id: 1, name: "第一个商品" },
        { id: 2, name: "第二个商品" },
        { id: 3, name: "第三个商品" },
        { id: 4, name: "第四个商品" },
        { id: 5, name: "第五个商品" },
      ],
    };
  },
};
</script>

看一下页面效果
在这里插入图片描述

query传参

  • 以前我们通过url传值,都在在地址栏最后面加一个?跟上需要传递的参数,
  • 那么在Vue里可以不可以呢?我们来试一下
<router-link to="/about?id=1">{{ item.name }}</router-link>

query接收参数

  • 创建一个生命周期函数,我们打印一下this.$route看一下
<script>
export default {
  created() {
    console.log(this.$route)
  }
}
</script>
  • query传值的时候,所有的参数都在this.$route.query里面

在这里插入图片描述

  • 直接把参数显示在页面上
<template>
  <div class="about">
    <h1>这里是购物车</h1>
    <p>{{ this.$router.query.id }}</p>
  </div>
</template>
  • 看一下效果

在这里插入图片描述

  • 太好了,这样做可以获得到参数,那么我们更改一些写法,使其每次点击的时候传递不同的参数
<router-link :to="`/about?id=${item.id}`">{{ item.name }}</router-link>

看一下效果
在这里插入图片描述

动态路由的的传参

先创建一个新的info页面,以便我们观察
在这里插入图片描述
在router页面下的index文件里配置相关的路由信息

  • 动态路由传递参数的时候,路由配置哪里设置了几个参数,在传递的时候就需要传递几个参数
const info = () => import('../views/info/index')
  {
    path:'/info/:id/:name',
    name:'info',
    component:info
  }

在商店页面更改一下router-link

<h1>这里是商店</h1>
<ul>
  <li v-for="item in list" :key="item.id">
    <!-- <router-link :to="`/about?id=${item.id}`">{{ item.name }}</router-link> -->
    <router-link :to="`/info/${item.id}/${item.name}`">
    {{ item.name }}
    </router-link>
  </li>
</ul>

动态路由接收参数(params)

还记得上面打印得那张this.$route得图片么?动态路由的参数在params

  • 动态路由传递的参数需要这样接收
  • this.$route.params.参数
    在这里插入图片描述
<template>
  <div>
    <h1>这里是商品详情页面</h1>
    <p> {{ this.$route.params.id }} </p>
    <p> {{ this.$route.params.name }} </p>
  </div>
</template>

<script>
export default {
  
}
</script>
  • 看一下页面效果

在这里插入图片描述

route和rouer的区别

$router

  • 当前所有的路由对象可以理解为routes
  • 就是这个我们配置所有路由的地方
    在这里插入图片描述

$route

  • 当前路由对象用于获取当前路由里面的属性或者方法

  • 当前的页面哪个是活跃的,那么$route就是谁

页面间的跳转

  • 路由的切换,本质是组件的显示与隐藏
  • 字符串的方式进行跳转
<router-link :to="`/ 页面名称?参数名=${参数值}`"></ router-link>
  • 对象的方式进行跳转
<router-link :to="{path: '/页面名称' }">< / router-link>
  • js的方式进行跳转

我们利用$router的push方法进行跳转

<h1>这里是商店</h1>
<ul>
 <li v-for="item in list" :key="item.id">
   <!-- <router-link :to="`/about?id=${item.id}`">{{ item.name }}</router-link>
   <router-link :to="`/info/${item.id}/${item.name}`">动态路由
   {{ item.name }}
   </router-link> -->
   <button @clikc='jump(item)'>跳转页面,传参:{{item.id}}:{{item.name}}</button>
 </li>
</ul>
  • 当我们用js的方式进行跳转,同时又需要传递参数的时候,一定要使用命名路由,就是这个
  • 一般我们用命名路由的时候,name和path的值是一样的
    在这里插入图片描述
  • 点击按钮,执行jump方法,进行跳转
  • 传递参数的格式为
  • this.$router.push({name:‘路由名称’,query:{ 参数们 }})
  • 当需要用到动态路由传参(params)的时候,把query换成params即可
  methods:{
    jump(item) {
      console.log(item)
      this.$router.push({name:'About',query:{id:item.id,name:item.name}})
    }
  }

看一下效果
非常成功
在这里插入图片描述

Logo

前往低代码交流专区

更多推荐