VueJS Como passar dados para um componente modal usando eventbus

ST80

Estou construindo um pequeno vueaplicativo onde, entre outras coisas, é possível excluir uma entrada de uma coleção de músicas. Portanto, neste ponto, tenho uma lista de álbuns de música e, ao lado da entrada, tenho um botão "excluir". Quando eu faço o seguinte:

<li v-for="cd in cds">
   <span>{{cd.artist}} - {{cd.album}}</span> <button v-on:click="deleteAlbum(cd.ID)">Delete</button>
</li>

e então em meus métodos faço:

deleteAlbum(id){   
 this.$http.delete('/api/cds/delete/'+id)
    .then(function(response){
        this.fetchAll()
    // });
},

isso funciona bem até agora, mas para torná-lo mais agradável, quero que a funcionalidade de exclusão apareça em um modal / pop-up, então fiz as seguintes alterações:

<li v-for="cd in cds">
   <div class="cd-wrap">
     <span>{{cd.artist}} - {{cd.album}}</span>
     <button @click="showDeleteModal({id: cd.ID, artist: cd.artist, album: cd.album})" class="btn">Delete</button>
   </div>
  <delete-modal v-if="showDelete" @close="showDelete = false" @showDeleteModal="cd.ID = $event"></delete-modal>
</li>

então, como visto acima, criei um <delete-modal>-componente. Quando clico no botão delete, quero passar os dados da entrada para o <delete-modal>componente com a ajuda de um eventbus. Para isso, dentro dos meus métodos fiz o seguinte:

showDeleteModal(item) {
  this.showDelete = true
  eventBus.$emit('showDeleteModal', {item: item})
}

Então, <delete-modal>dentro do created()ciclo de vida eu fiz isso:

created(){
  eventBus.$on('showDeleteModal', (item) => {
    console.log('bus data: ', item)
  })  
}

isto me dá muitos pop-ups / modais abertos vazios !! ??

Alguém pode me dizer o que estou fazendo de errado aqui?

** EDITAR **

Após uma boa sugestão, descartei o método eventBus e passei os dados como suportes para o <delete-modal>então agora fica assim:

<delete-modal :id="cd.ID" :artist="cd.artist" :album="cd.album"></delete-modal>

e o componente delete-modal:

export default {
   props: ['id', 'artist', 'album'],
   data() {
     return {
        isOpen: false
     }
   },
   created(){
     this.isOpen = true
   }

}

O único problema que tenho agora é que ele tenta abrir um modal para cada entrada, como posso detectar o ID / entrada correto?

papel papel

Vou mostrar a você como fazer isso com adereços, já que é uma relação pai-filho. Vou mostrar uma maneira simples de fazer isso. Você precisa modificar ou adicionar algum código, é claro, para funcionar em seu aplicativo.

Componente pai

<template>
    <div>
       <li v-for="cd in cds" :key="cd.ID">
         <div class="cd-wrap">
           <span>{{cd.artist}} - {{cd.album}}</span>
           <button 
              @click="showDeleteModal({id: cd.ID, artist: cd.artist, album: cd.album})" 
              class="btn"
           >
            Delete
           </button>
         </div>

         <delete-modal v-if="showDelete" :modal.sync="showDelte" :passedObject="objectToPass"></delete-modal>
       </li>
    </div>
</template>
<script>
import Child from 'Child'
    export default {
        components: {
            'delete-modal': Child
        },
        data() {
            return {
                showDelete: false,
                objectToPass: null,
                //here put your other properties
            }
        },
        methods: {
            showDeleteModal(item) {
              this.showDelete = true
              this.objectToPass = item
            }
        }
    }
</script>

Componente Criança

<template>
    /* Here put your logic component */
</template>
<script>
    export default {
        props: {
            modal:{
                default:false
            },
            passedObject: {
                type: Object
            }
        },
        methods: {
            closeModal() { //the method to close the modal
                this.$emit('update:modal')
            }
        }
        //here put your other vue.js code

    }
</script>

Quando você usa o modificador .sync para passar um prop no componente filho, aí (no cmp filho) você deve emitir um evento como:

this.$emit('update:modal')

E com isso o modal será fechado e aberto. Também usando props, passamos ao componente filho o objeto que contém o id e outras coisas.

Se você quiser saber mais sobre adereços, clique aqui

Este artigo é coletado da Internet.

Se houver alguma infração, entre em [email protected] Delete.

editar em
0

deixe-me dizer algumas palavras

0comentários
loginDepois de participar da revisão

Artigos relacionados

VueJS Como passar dados para um componente modal usando eventbus

Como passar dados para um componente modal vuestrap

AEM - Como passar dados para um componente

AEM - Como passar dados para um componente

Como passar dados para um único componente

Como passar dados de um componente para outro componente em reactJs usando mapa?

Vuejs - Como passar adereços para um componente filho de uma matriz que vive em dados?

Como passar dados para o componente filho dos vuejs pais

Como passar dados de um componente para outro componente

Como passar dados de um componente para outro componente

Como passar o componente modal de dados para o componente pai usando o ng-bootstrap no angular 4

VueJs: Como passar um valor de 'função computada' do componente filho para o componente pai usando $ emit (optionalPayload) e $ on?

Como passar dados para o controlador usando modal ui angular?

Como passar dados do aplicativo para um componente VueRouter

Como passar dados de um componente para outro ReactJS

ReactJs: Como passar dados de um componente para outro?

Como passar dados de um componente para outro no arquivo ts?

Angular: como passar dados de um componente para outro componente sem passar por HTML?

Angular: como passar dados de um componente para outro componente sem passar por HTML?

Como passar adereços de um componente filho para outro componente filho usando o componente pai

Como passar adereços de um componente filho para outro componente filho usando o componente pai

Como posso passar dados de um componente pai para um componente filho no Vue.js?

Como passar dados de um componente filho para um componente pai em React.js

Não é possível passar dados de um componente para outro componente usando SharedService no angular?

Como passar dados para o componente angular usando o componente de diálogo nebular?

Como passar dados dinâmicos de um arquivo blade como um suporte para um componente vue?

Como passar dados do componente para o modal ngBootstrap no Angular 7?

Angular 2 ng-bootstrap Modal: Como passar dados para o componente de entrada

Como passar dados do modal para o componente angular de chamada?

TOP lista

  1. 1

    R Shiny: use HTML em funções (como textInput, checkboxGroupInput)

  2. 2

    UITextView não está exibindo texto longo

  3. 3

    Dependência circular de diálogo personalizado

  4. 4

    Acessando relatório de campanhas na AdMob usando a API do Adsense

  5. 5

    Como assinar digitalmente um documento PDF com assinatura e texto visíveis usando Java

  6. 6

    R Folheto. Dados de pontos de grupo em células para resumir muitos pontos de dados

  7. 7

    Setas rotuladas horizontais apontando para uma linha vertical

  8. 8

    O Chromium e o Firefox exibem as cores de maneira diferente e não sei qual deles está fazendo certo

  9. 9

    Definir um clipe em uma trama nascida no mar

  10. 10

    Por que meus intervalos de confiança de 95% da minha regressão multivariada estão sendo plotados como uma linha de loess?

  11. 11

    Como dinamizar um Dataframe do pandas em Python?

  12. 12

    regex para destacar novos caracteres de linha no início e no fim

  13. 13

    Why isn't my C# .Net Core Rest API route finding my method?

  14. 14

    Como obter a entrada de trás de diálogo em treeview pyqt5 python 3

  15. 15

    Tabela CSS: barra de rolagem para a primeira coluna e largura automática para a coluna restante

  16. 16

    How to create dynamic navigation menu select from database using Codeigniter?

  17. 17

    Como recuperar parâmetros de entrada usando C #?

  18. 18

    Changing long, lat values of Polygon coordinates in python

  19. 19

    Livros sobre criptografia do muito básico ao muito avançado

  20. 20

    Método \ "POST \" não permitido no framework Django rest com ações extras & ModelViewset

  21. 21

    Pesquisa classificada, conte números abaixo do valor desejado

quentelabel

Arquivo