@faynster

Как удалить компонент при клике на него на vue.js?

Есть родительский компонент
<template>

    <component v-for="n in blocks" :is="n" @remove="removeBlock" >
    </component>
    
    <div class="mainBtn">
        <btn-addblock-1 
            v-for="n in blockTypes" 
            @click="addBlock(n)" 
            class="btnAddblock"
        />
        </div>
    
</template>


<script>
import MainBlock from './components/mainBlock.vue'


export default{
    components:{
        MainBlock,
    },
    data: () => ({ 
        blocks: [],
        blockTypes: ['block-item1', 'block-item2', 'block-item3', 'block-item4', 'block-item5', 'block-item6',]
    }),
    methods: {
        addBlock(n){
            this.blocks.push(n)
            console.log(this.blocks)
        },
        removeBlock() {
            this.blocks = this.blocks.filter(p => p.id !== this.id)
            console.log(this.blocks)

        },
    }

}
</script>


И дочерний компонент
<template>
    <div class="block" v-bind:id="id">
        <div class="block__item1">
            <changeItem/>

            <PhotoUploader/>
        </div>

        <btn-delete
            @click="removeBlock()"
            class="btnDelete"
        />
    </div>
</template>

<script>
export default {
    name: 'blockItem1',
    data: () => ({   
        id : Date.now(),   
    }),
    methods: {
        removeBlock(){
            this.$emit('remove')
        }
    }
}
</script>


Как сделать так что бы удалялся компонент при нажатии На данный момент удаляются все созданные компоненты а не конкретно выбранный?
  • Вопрос задан
  • 983 просмотра
Решения вопроса 1
Wispik
@Wispik
Нужно в функцию removeBlock передавать сам элемент
<component v-for="n in blocks" :is="n" @remove="removeBlock(n)" >

...

removeBlock(el) {
       this.blocks = this.blocks.filter(p => p.id !== el.id)
       console.log(this.blocks)

}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы