Vue3路由params参数

Vue3路由params参数

params是什么?

它就是Vue路由插件中的路径参数,我们可以把一些动态参数放在路径中;它的好处就是更加的符合RESTful规范;

实际使用

  • 现实中,可以看到最多的就是商品列表这些页面,用户在列表中点击任意商品,跳转到该商品的详情页,详情页要对应商品的ID查数据;

  • 比如说,我们现在有两个页面,一个页面是商品列表,一个是商品详情,我们先来写一下路由配置

js 复制代码
import { createRouter, createWebHashHistory } from 'vue-router'
import GoodsList from '../components/GoodsList.vue'
import GoodsDetail from '../components/GoodsDetail.vue'

const routes = [{
    path: '/', component: GoodsList
}, {
    path: '/detail/:id', component: GoodsDetail, name: 'GoodsDetail'
}]
const router = createRouter({
    history: createWebHashHistory(),
    routes
});

export default router
  • 注意看商品详情页的路径,这个路径是一个占位

  • 现在我们来简单的写一下商品列表页面

js 复制代码
<template>
    <div>
        <h1>商品列表</h1>
        <div v-for="goods in goodsList" :key="goods.id">
            <router-link :to="{ name: 'GoodsDetail', params: { id: goods.id } }">{{ goods.name }}</router-link>
        </div>
    </div>
</template>

<script setup>
import { RouterLink } from 'vue-router';

const goodsList = [
    { id: 1, name: '奔驰' },
    { id: 2, name: '宝马' },
    { id: 3, name: '奥迪' },
];
</script>

注:上面的非常简单,就是写一个一个对象,然后通过v-for遍历到路由链接上

  • 接着就来写商品详情页
vue 复制代码
<template>
    <div>
        <h1>商品详情</h1>
        <p>商品ID: {{ route.params.id }}</p>
        <p>商品名称: {{ goodsName }}</p>
    </div>
</template>

<script setup lang="ts">
import { useRoute } from 'vue-router';

const route = useRoute();
const goodsId = Number(route.params.id);
const goodsName = {
    1: '奔驰',
    2: '宝马',
    3: '奥迪'
}[goodsId] || '未知商品';
</script>

具体的流程如下:

plaintext 复制代码
GoodsList.vue(列表页)
  ↓ 点击按钮,调用goToDetail(1)
  ↓ 执行router.push({name: 'GoodsDetail', params: {id:1}})
Vue Router(路由)
  ↓ 自动拼接URL为/detail/1,并存id=1到参数仓库
  ↓ 跳转到/detail/1,渲染GoodsDetail组件
GoodsDetail.vue(详情页)
  ↓ 用route.params.id取出id=1
  ↓ 根据id=1找到"奔驰",显示在页面上

几个注意事项

  1. 看组件中路由链接跳转的地方,我们用的是name,切记不要使用path,使用path的话params会失效;
  2. params默认传递是字符串,如果你想传数字的话,就需要使用NUMER转一下,例如我们上面的const goodsId = Number(route.params.id);
  3. 路由上定义几个,参会传几个,例如你路由配置只定义了id,就算你传name,不定义也看不到;
相关推荐
人工智能训练3 小时前
【极速部署】Ubuntu24.04+CUDA13.0 玩转 VLLM 0.15.0:预编译 Wheel 包 GPU 版安装全攻略
运维·前端·人工智能·python·ai编程·cuda·vllm
会跑的葫芦怪3 小时前
若依Vue 项目多子路径配置
前端·javascript·vue.js
xiaoqi9224 小时前
React Native鸿蒙跨平台如何进行狗狗领养中心,实现基于唯一标识的事件透传方式是移动端列表开发的通用规范
javascript·react native·react.js·ecmascript·harmonyos
jin1233224 小时前
React Native鸿蒙跨平台剧本杀组队消息与快捷入口组件,包含消息列表展示、快捷入口管理、快捷操作触发和消息详情预览四大核心功能
javascript·react native·react.js·ecmascript·harmonyos
烬头88216 小时前
React Native鸿蒙跨平台实现二维码联系人APP(QRCodeContactApp)
javascript·react native·react.js·ecmascript·harmonyos
pas1366 小时前
40-mini-vue 实现三种联合类型
前端·javascript·vue.js
摇滚侠6 小时前
2 小时快速入门 ES6 基础视频教程
前端·ecmascript·es6
2601_949833396 小时前
flutter_for_openharmony口腔护理app实战+预约管理实现
android·javascript·flutter
珑墨7 小时前
【Turbo】使用介绍
前端
军军君017 小时前
Three.js基础功能学习十三:太阳系实例上
前端·javascript·vue.js·学习·3d·前端框架·three