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

Vue.js父组件向子组件传值失败问题求助

解决Vue.js中子组件无法接收父组件数据的问题

嘿,我帮你排查出了几个导致数据无法传递给子组件的问题,咱们一个个来解决:


1. 子组件未声明接收Props

这是最核心的问题:你的Service.vue里完全没有在<script>部分定义props来接收父组件传递的services数据。子组件根本不知道services这个变量的存在,自然没法在模板里使用它进行循环渲染。

2. App.vue中的组件名称拼写错误

你在App.vue的export default里写的是nam: 'App',正确的属性名应该是name: 'App'——虽然这个错误不会直接导致props传递失败,但属于语法错误,最好修正。

3. 组件导入路径的规范问题

你导入Services组件时写的是import Services from "@/components/Service",建议加上.vue后缀(即import Services from "@/components/Service.vue"),虽然部分构建工具支持省略后缀,但加上后代码更规范,避免潜在的路径识别问题。


修正后的App.vue代码

<template>
  <div class="app">
    <Header/>
    <div class="row">
      <div class="col-3">
        <Services v-bind:services="services"></Services>
      </div>
    </div>
  </div>
</template>

<script>
import Header from "./components/Header.vue";
import Services from "@/components/Service.vue"; // 加上.vue后缀
export default {
  name: 'App', // 修正nam为name
  components: {
    Services,
    Header,
  },
  data: function () {
    return {
      services: [
        {
          title: "Logo flatdesign",
          description: "Je fais de super flatdesign",
          image: "https://fiverr-res.cloudinary.com/t_gig_cards_web_x2,q_auto,f_auto/gigs/22527722/original/3b5876ffb817872561d9eba6788dced76cb78224.jpg",
          price: 6.7,
          rate: 4,
          id:1
        },
        {
          title: "Logo rapide",
          description: "Je fais vite un logo",
          image: "https://fiverr-res.cloudinary.com/t_gig_cards_web_x2,q_auto,f_auto/gigs/142024147/original/2abc0f9433df4f98790707a591772e56bf8777a1.jpg",
          price: 5.5,
          rate: 3,
          id:2
        },
        {
          title: "Logo flatdesign",
          description: "Je fais de super flatdesign",
          image: "https://fiverr-res.cloudinary.com/t_gig_cards_web_x2,q_auto,f_auto/gigs/22527722/original/3b5876ffb817872561d9eba6788dced76cb78224.jpg",
          price: 6.7,
          rate: 4,
          id:3
        }
      ]
    }
  }
}
</script>

<style>
</style>

修正后的Service.vue代码

<template>
  <div class="home">
    <div class="row">
      <div class="col-3" v-for="service in services" v-bind:key="service.id">
        <div class="jumbotron">
          <img :src="service.image" height="100%" width="100%">
          <h4> {{service.title}} </h4>
          <div class="row">
            <div class="col rate"> {{service.rate}} ★ </div>
            <div class="col price"> {{service.price}} € </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</template>

<script>
export default {
  props: {
    // 声明接收services属性,指定类型为数组并标记为必填
    services: {
      type: Array,
      required: true
    }
  }
}
</script>

<style scoped>
.rate{
  color: yellow;
}
.price{
  font-weight: bold;
}
</style>

完成这些修正后,父组件App.vue的services数据就能正确传递给子组件Service.vue了,子组件通过props接收后,就能正常在模板里循环渲染服务列表啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 22:57:59