<body>
<div id="app">
<booklist>
<titleslot slot="titleslot" v-bind:title="vmtitle"></titleslot>
<itemslot slot="itemslot" v-for="(item,index) in vmItem" :item="item" v-bind:index="index" v-on:vremove="vmremove"></itemslot>
</booklist>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
Vue.component("booklist",{
template: '<div>\
<slot name="titleslot"></slot>\
<ul>\
<slot name="itemslot"></slot>\
</ul>\
</div>'
});
Vue.component("titleslot",{
props: ['title'],
template: '<div>{{title}}</div>'
});
Vue.component("itemslot",{
props: ['item','index'],
template: '<li>-{{index}}--------{{item}}<button @click="remove">删除</button></li>',
methods: {
remove: function () {
//this.$emit 自定义事件分发
this.$emit('vremove',this.index);
}
}
});
var vm = new Vue({
el: "#app",
data: {
vmtitle: "图书列表",
vmItem: ['book1','book2','book3']
},
methods: {
vmremove: function (index) {
console.log("删除"+this.vmItem[index]+"成功!"+"---"+index)
this.vmItem.splice(index,1);
}
}
})
</script>
</body>