<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Hello World</title>
<script src="./vue.js"></script>
</head>
<body>
<div id="root">
<input type="text" v-model="todoValue">
<button @click="handleBtnClick">提交</button>
<ul>
<todo-item v-bind:content="item"
v-bind:index="index"
v-for="(item,index) in list"
@delete="handleItemDelete">
</todo-item>
</ul>
</div>
<script>
var TodoItem = {
props: ['content','index'],
template: "<li @click='handleItemClick'>{{content}}</li>",
methods:{
handleItemClick:function () {
this.$emit('delete',this.index); //点击子组件向父组件触发事件
}
}
};
var app = new Vue({
el: '#root',
components:{
TodoItem:TodoItem //注册局部组件
},
data: {
list: [],
todoValue: ''
},
methods: {
handleBtnClick: function () {
this.list.push(this.todoValue);
this.todoValue = ''
},
handleItemDelete:function (index) {
this.list.splice(index,1) //实现点哪删哪
}
}
})
</script>
</body>
</html>
<!--
逻辑解析
父组件向子组件传值 用到v-bind 注意子组件需要接受传递过来的值props[]
子组件向父组件传值 this.$emit 触发事件 相对的父组件在监听该事件
v-bind:content 简写 :content
v-on:delete 简写@delete
-->