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

Vue项目点击Read More按钮无法显示JSON内容求助

解决Vue项目中Recipe详情页无法加载的问题

问题根源

  1. 路由参数类型不匹配:URL里的参数默认都是字符串,但你在PostDetails.vue里把id prop声明为Number类型,导致校验报错。更关键的是,find方法用===匹配时,数字ID和字符串ID不相等,根本找不到对应的文章,所以页面空白。
  2. 之前的axios 404其实不是路径问题(public下的posts.json用/posts.json请求是对的),本质还是ID匹配失败导致的。

修复步骤

1. 修改路由配置,自动转换ID类型

打开router/index.js,把PostDetails路由的props改成函数形式,自动把路由参数里的字符串ID转成数字:

{
  path: "/post/:id",
  name: "PostDetails",
  component: () => import("../components/PostDetails.vue"),
  // 替换原来的props: true
  props: route => ({ id: Number(route.params.id) })
}

这一步是核心——不管你在router-link里怎么转ID,URL参数始终是字符串,必须在路由层把类型转对,才能满足prop的类型要求,同时让find方法匹配成功。

2. 简化router-link的ID传递(可选)

你的blogPosts里的post.id本来就是数字,所以router-link里的转换可以直接去掉:

<router-link
  :to="{ name: 'PostDetails', params: { id: post.id } }"
  class="btn btn-primary"
>
  Read More
</router-link>

3. 验证详情页的匹配逻辑

现在this.id已经是数字了,和posts.json里的ID类型一致,find方法就能正常找到对应的文章:

this.post = posts.find((post) => post.id === this.id);

关于axios的404问题

如果想用axios代替fetch,直接用/posts.json路径就行,示例代码:

import axios from "axios";

// ...

async fetchPostData() {
  try {
    const { data } = await axios.get("/posts.json");
    this.post = data.find(post => post.id === this.id);
  } catch (error) {
    console.error("加载文章失败:", error);
  }
}

这样改完之后,控制台的prop警告会消失,点击Read More就能正常显示对应文章内容了。

内容的提问来源于stack exchange,提问作者Taylor Brown

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 17:25:01