Vue.js Bootstrap表-在父组件和子组件之间传递数据

91zkwejq  于 2023-08-07  发布在  Vue.js
关注(0)|答案(1)|浏览(131)

我有两个组件:父项和子项。在这两个组件中,我都使用了Bootstrap表,它们的“项”和“字段”来自API。Child component应该向Parent component传递数据(对于每个表行,为true或false)。我想将此数据从子组件分配给父组件引导表行对象。你可以在下面看到我的代码。
所以,问题是v-if语句不起作用。看起来好像对象'state'是在组件创建之前分配的,因为在console.log上我可以看到新的'state'对象在那里,并且正确地填充了true/false,但在DOM中情况不同,state是未定义的。
任何人谁可以帮助我如何设置'state'对象,并使其工作?
父组件:

<template>
    <b-table v-else :items=“customItems” :fields="fields" responsive>
        <template v-slot:cell(config)="row">
            <child-component
              @onitembind='isSingleRow'>
            </child-component>
        </template>       
    </b-table>
</template>

<!-- Checkbox column --> 
<template v-slot:cell(labelCheckbox)="row">
    <div class="label-checkbox" v-if="row.item.state">
        <span><i class="fa fa-angle-up text-primary">
    </div>
</template>


<script>
    methods: {
        isSingleRow(event) {
            this.singleRow.push(event);
            for(let i in this.customItems){
                this.customItems[i].state = this.singleRow[i]
                console.log('EHO ', i, ' ', this.customItems[i]);
            }
        }
    }
</script>

字符串
子组件:

<script>
    created() {
            this.tableRowsLength()
    },

    methods: {
        tableRowsLength () {
                if((this.innerTableItems.length) != 1){
                    this.$emit('onitembind', true)
                } else{
                    this.$emit('onitembind', false) 
                 }
            }
    }
</script>

8yparm6h

8yparm6h1#

在Vue 2中,向现有对象添加属性不会是React式的,因为Vue无法正确地为属性添加getter/setter。
要解决这个问题,您应该使用Vue.set/this.$set方法。
this.$set(this.customItems[i], 'state', this.singleRow[i])
有关详细信息,请参阅:https://v2.vuejs.org/v2/guide/reactivity.html#For-Objects

相关问题