gpt4 book ai didi

javascript - VueJS 如何使用事件总线将数据传递给模态组件

转载 作者:搜寻专家 更新时间:2023-10-30 22:34:06 24 4
gpt4 key购买 nike

我正在 build 一个小型的 vue应用程序,除其他外,可以删除音乐收藏的条目。所以此时我有一个音乐专辑列表,在条目旁边有一个“删除”按钮。当我执行以下操作时:

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

然后在我的方法中做:

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

到目前为止一切正常,但为了让它更漂亮,我希望删除功能出现在模态/弹出窗口中,因此我进行了以下更改:

<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>

所以,如上所示,我创建了一个 <delete-modal> -成分。当我单击删除按钮时,我想将条目中的数据传递给 <delete-modal>组件在事件总线的帮助下。为此,在我的方法中我这样做了:

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

然后,在 <delete-modal> , 在 created() 里面-生命周期我这样做了:

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

这给了我很多空的打开的弹出窗口/模式!!??

谁能告诉我我做错了什么?

** 编辑 **

在一个很好的建议之后,我放弃了 eventBus 方法并将数据作为 Prop 传递给 <delete-modal>所以现在它看起来像这样:

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

和删除模式组件:

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

}

我现在唯一的问题是,它会尝试为每个条目打开一个模式,我如何才能检测到正确的 ID/条目?

最佳答案

我将向您展示如何使用 props 来实现它,因为它是一种父子关系。我将向您展示一种简单的实现方式。您当然需要修改或添加一些代码才能在你的应用。

Parent component

<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>

Child Component

<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>

当您使用 .sync 修饰符在子组件中传递 prop 时,(在子 cmp 中)您必须发出如下事件:

this.$emit('update:modal')

然后模态窗口将关闭和打开。我们还使用 props 将包含 id 和其他内容的对象传递给子组件。

想了解更多 Prop ,click here

关于javascript - VueJS 如何使用事件总线将数据传递给模态组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49231918/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com