You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue单页应用跳转详情页后无法渲染对应ID数据问题求助

Vue路由跳转详情页不显示对应数据修复方案

以下是需要修改的3处问题及对应修正代码:

  • 路由配置参数命名不符合规范
    原路由中/detail/:data.id的参数命名带.会导致参数解析异常,直接将参数改为标准命名id即可:
import Vue from "vue";
import VueRouter from "vue-router";

import Galleria from "./components/Galleria.vue";
import Detail from "./components/Detail.vue";

Vue.use(VueRouter);
const routes = [
  {
    path: "/",
    name: "galleria",
    component: Galleria
  },
  {
    path: "/detail/:id",
    name: "Detail",
    component: Detail
  }
];

const router = new VueRouter({
  mode: "history",
  routes
});

export default router;
  • Galleria组件v-for循环的key属性绑定错误
    原代码中循环列表的key绑定了当前路由参数,和循环项无关,会导致列表渲染异常,改为绑定当前循环项的id即可:
<template>
  <div>
    <ul>
      <li v-for="item in dataList" :key="item.id">
        <router-link :to="{ path: '/detail/' + item.id }">
          {{ item.id }} - {{ item.name }}
        </router-link>
      </li>
    </ul>
  </div>
</template>

<script>
import data from "../assets/data.json";

export default {
  data() {
    return {
      dataList: data,
    };
  },
  name: "galleria",
};
</script>

这里顺便把变量名从data改成了dataList,避免和Vue内置的data配置项重名引发歧义。

  • Detail组件缺少按路由ID筛选数据的逻辑
    原代码直接把整个json数组赋值给了变量,没有根据路由参数匹配对应条目,新增计算属性来筛选对应数据即可:
<template>
  <div>
    <h1>{{ currentItem.name }}</h1>
    <p>{{ currentItem.description }}</p>
  </div>
</template>

<script>
import data from "../assets/data.json";

export default {
  name: "Detail",
  computed: {
    currentItem() {
      // 路由参数默认是字符串格式,转为数字后和json中的id匹配
      const targetId = Number(this.$route.params.id)
      return data.find(item => item.id === targetId) || {}
    }
  }
};
</script>

修改完成后点击列表项即可正常加载对应ID的详情内容。

内容的提问来源于stack exchange,提问作者Alejandro Arias

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 14:06:03