实现一个todoList
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>todolist</title>
<script src="vue.js"></script>
</head>
<!--
v-model:双向绑定,输入框的内容变化,vue对象的数据也变化,反之同样
v-on:click:简写为@click,绑定点击事件,执行vue对象里的函数内容
v-for:遍历vue对象里的数组,类似于高级for循环
Vue.component全局组件,以及局部组件
v-bind:index简写为:index,父组件给子组件传值
this.$emit 子组件给父组件传值,$表示一个实例或属性
-->
<body>
<div id="app">
<!-- 双向绑定 -->
<input type="text" name="" id="" value="" v-model="inputValue" />
<!-- 绑定点击事件 -->
<button type="button" v-on:click="handleBtnClick">提交</button>
<ul>
<!-- 遍历vue对象的数据 -->
<!-- <li v-for="item in list">{{item}}</li> -->
<!-- v-bind:content="item"给组件传值,可以简写为:content -->
<!--todo-item为全局组件,驼峰命名用-代替,代替上面的li标签,把li标签写到全局组件的模板中 -->
<!--content="item"把list中每一个元素取出来赋值给item,然后通过content和全局组件交互传值 -->
<!--@delete监听子组件的delete事件 -->
<!--v-for="(item,index) in list" index是元素下标 -->
<todo-item :content="item" v-bind:index="index" v-for="(item,index) in list" @delete="handleItemClick"></todo-item>
</ul>
</div>
<script type="text/javascript">
/* 创建全局组件,名字叫做TodoItem */
Vue.component("TodoItem", {
props: ['content'],
/* 参数 */
template: "<li>{{content}}</li>" /* 模板 */
})
/* 局部组件(其实就是一个变量),需要在vue实例中注册后才能使用 */
var TodoItem = {
props: ['content','index'],
template: "<li @click='handleItemClick'>{{content}}</li>",
methods:{
handleItemClick:function(){
this.$emit("delete",this.index);/*子组件向父组件传值,触发事件,事件名称为delete,参数为list下标 */
}
}
}
/* 新建一个vue对象 */
var app = new Vue({
el: '#app',
/* 在vue中注册临时组件,变量名叫TodoItem,组件名也叫TodoItem */
components: {
TodoItem: TodoItem
},
data: {
list: [],
inputValue: ''
},
methods: {
handleBtnClick: function() {
/* 在vue对象里获取本对象数据用this. */
this.list.push(this.inputValue)
this.inputValue = ''
},
handleItemClick:function(index){
/* 从index位置开始,删除一个元素 */
this.list.splice(index,1);
}
}
})
</script>
</body>
</html>