如何将道具传递给vue中的子组件

Posted

技术标签:

【中文标题】如何将道具传递给vue中的子组件【英文标题】:How to pass props to child component in vue 【发布时间】:2021-12-02 14:41:07 【问题描述】:

我有一个父组件,我在其中进行 API 调用并获取响应。所以我要做的就是将此响应作为道具传递给 Vue 中的子组件。 所以这是我的父组件和调用:

<button class="btn button col-2" @click="addToCart()">
                                    Add to cart
                                </button>
addToCart: function () 
            let amount = this.itemsCount !== "" ? this.itemsCount : 1;
            if(this.variationId != null) 
                this.warningMessage = false;
                cartHelper.addToCart(this.product.id, this.variationId, amount, (response) => 
                    this.cartItems = response.data.attributes.items;
                );
             else 
                this.warningMessage = true;
            
        ,

所以我想将此“this.cartItems”传递给子组件,即:

<template>
    <div
        class="dropdown-menu cart"
        aria-labelledby="triggerId"
    >
        <div class="inner-cart">
            <div v-for="item in cart" :key="item.product.id">

                <div class="cart-items">
                    <div>
                        <strong> item.product.name </strong>
                        <br/>  item.quantity  x $45
                    </div>
                    <div>
                        <a class="remove" @click.prevent="removeProductFromCart(item.product)">Remove</a>
                    </div>
                </div>
            </div>
            <hr/>
            <div class="cart-items-total">
                <span>Total: cartTotalPrice</span>
                <a href="#" @click.prevent="clearCartItems()">Clear Cart</a>
            </div>
            <hr/>
            <router-link :to="name: 'order'" class="btn button-secondary">Go To Cart</router-link>
        </div>
    </div>
</template>

<script>

export default 
    computed: 

    ,
    methods: 

    
;
</script>

所以我是 vue 的新手,如果你能帮我解决这个问题,我会很高兴。

【问题讨论】:

【参考方案1】:

Vue.component('Child', 
  template: `
    <div class="">
      <p> childitems </p>
    </div>
  `,
  props: ['childitems']
)

new Vue(
  el: '#demo',
  data() 
    return 
       items: []
    
  ,
  methods: 
    getItems() 
      //your API call
      setTimeout(() => 
        this.items = [1, 2]
      , 2000);
    
  
  
)

Vue.config.productionTip = false
Vue.config.devtools = false
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="demo">
  <button @click="getItems">get data</button>
  <Child v-if="items.length" :childitems="items" />
</div>

您可以等待响应,当您选择 this.cartItems 时,然后使用 v-if="this.cartItems.length" 条件渲染您的子组件

【讨论】:

【参考方案2】:

传递道具非常简单。如果cartItems 是你不想作为道具传递的,你可以这样做:

<my-child-component :cartItems="cartItems"></my-child-component>

在这种情况下,您将孩子实现为myChildComponent。你将cartItems:cartItems="cartItems" 传递给它。在您的孩子身上,您可以这样做:

props: 
    cartItems: Object
  

现在您可以在方法中使用 this.cartItems 或在模板中使用 cartItems

【讨论】:

以上是关于如何将道具传递给vue中的子组件的主要内容,如果未能解决你的问题,请参考以下文章

如何将道具传递给vue中的兄弟组件和子组件

如何在单个文件 vue 组件中的初始化时将道具传递给 vue 组件(vue-loader 中的依赖注入)?

将父母道具传递给Vue,js中的插槽

如何将图像位置传递给 Vue 中的子组件?

承诺解决并将道具传递给嵌套子项时如何更新Vue组件

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