我正在构建一个小型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方法并将数据作为道具传递给<delete-modal>
,所以现在看起来像这样:
<delete-modal :id="cd.ID" :artist="cd.artist" :album="cd.album"></delete-modal>
和delete-modal组件:
export default {
props: ['id', 'artist', 'album'],
data() {
return {
isOpen: false
}
},
created(){
this.isOpen = true
}
}
我现在唯一的问题是,它是否尝试为每个条目打开一个模态,如何检测正确的ID /条目?
答案 0 :(得分:3)
我将向您展示如何使用道具,因为它是一个父子关系。我将向您展示一种简单的方法。您需要修改或添加一些代码当然是为了工作你的应用。
父组件
<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>
子组件
<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')
随着模式将关闭并打开。也使用道具我们已经传递给子组件包含id和其他东西的对象。
如果您想了解有关道具的更多信息,请click here