如何在 Vue.js 中将对象作为道具发送和接收

Posted

技术标签:

【中文标题】如何在 Vue.js 中将对象作为道具发送和接收【英文标题】:How to send & receive object as a props in Vue.js 【发布时间】:2021-12-24 20:58:27 【问题描述】:

我有一个 Product 对象,我从 API 调用中获取它。所以在父组件中,我想将此对象发送到子对象中,即 SoldTickets 组件。

这是我的父组件:

<template>
    <section id="cart-page" class="row">
        <div v-for="item in cart.attributes.items" :key="item.id">
            <div class="col-lg-8 col-md-12 col-sm-12 col-xs-12">
                <div class="title">WARENKORB</div>
                <SoldTickets :item = item />
            </div>
        </div>
    </section>
</template>

还有我的孩子:

<template>
    <div id="sold-tickets">
        <div class="card">
            <div class="sold-tickets-actions properties">
                <div class="sold-tickets-inner">
                    <div class="ticket-details">
                        <div class="ticket-prop">
                            <div class="ticket-name"> item.product_name </div>
                            <div class="ticket-type"> item.variation_name </div>
                        </div>
                    </div>
                    <DeleteButton @click.prevent="removeProductFromCart(item.id)" />
                </div>
            </div>
        </div>
    </div>
</template>
<script>
export default 
    props: 
        data: 
            item: Object,
        
    ,

</script>

所以我是 Vue 的新手,所以我对 props 不是很有信心。你能帮我解决这个问题吗?

【问题讨论】:

【参考方案1】:

只需用""'' 包装绑定值即可:

<SoldTickets :item="item" />

【讨论】:

【参考方案2】:

你基本上是对的,但有几个错误:

您的道具在子组件中未正确声明,您不应该在其中包含“数据”。您要声明的所有道具都直接放在组件声明的“道具”键下:

export default 
    props: 
        item: Object,
    ,

您还缺少父组件中属性值的引号,因此这是无效的 html

<SoldTickets :item = item />

应该是

<SoldTickets :item = "item" />

【讨论】:

我收到此错误:TypeError: Cannot read properties of undefined (reading 'product_name') 我刚刚注意到你的道具声明中有一个错误,我会编辑我的答案。 感谢您的回答 好了,主要问题是你的 props 没有正确声明。 我不敢相信我没看过。谢谢你:)

以上是关于如何在 Vue.js 中将对象作为道具发送和接收的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Vue.js 中将实例化的 Vue 组件作为道具传递?

如何在vue中将不同值的数组作为道具传递

是否可以在 React 中将条件作为道具发送?

在Vuetify和Vue JS中将道具传递给父母

在 React-router Link 中将对象作为道具传递

如何使用 Vue.js 路由器将状态和事件处理程序作为道具传递给子组件?