<!DOCTYPE html> <html lang="en" xmlns:v-bind="http://www.w3.org/1999/xhtml"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <div id="app"> <todo> <todo-title slot="todo-title" :title="title"></todo-title> <todo-items slot="todo-items" v-for="(item,index) in todoItems" :item="item" :index="index" v-on:remove="removeItems(index)"></todo-items> </todo> <!-- <p>列表书籍</p>--> <!-- <ul>--> <!-- <li>Java</li>--> <!-- <li>Linux</li>--> <!-- <li>Python</li>--> <!-- </ul>--> </div> <!--1.导入Vue.js--> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <script> //slot:插槽 Vue.component("todo",{ template: '<div>\ <slot name="todo-title"></slot>\ <ul>\ <slot name="todo-items"></slot>\ </ul>\ </div>' }); Vue.component("todo-title",{ props: ['title'], template: '<div>{{title}}</div>' }); Vue.component("todo-items",{ props: ['item','index'], //template只支持一个根节点 //只能绑定当前组件方法 template: '<li>{{index}}---{{item}}<button @click="remove">删除</button></li> ', methods: { remove: function (index) { this.$emit('remove',index); } } }); var vm = new Vue({ el:"#app", data: { title: "asdaf", todoItems: ['wty','asd','zzz'] }, methods: { removeItems: function(index) { console.log("删除了"+this.todoItems[index]+"OK"); this.todoItems.splice(index,1);//一次删除一个元素 } } }) </script> </body> </html>