使用VUE来实现简单的TodoList(持续更新中)

我们用到了VUE中的v-for、v-on、v-model三种指令

下面我谈一下现阶段对这三个指令的理解


v-for
<li v-for = 'item in list'>{{item}}</li>  

我对v-for的理解就是VUE中的for循环,例如item in list就和C语言中的for i in range有异曲同工之意。

v-on
<button v-on:click = "handleBtnClick">提交</button> 

v-on用来绑定事件,上边就是给button绑定了一个点击事件

v-model
<input type="text" v-model = "inputvalue"/>

V-model实质上就是双向绑定,把输入框中的值与inputvalue中的值绑定以来,一方改变双方都改变

TodoList的实现代码如下,现在只实现了添加功能,后期会一一实现

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>TodoList</title>
        <script src="./vue.js"></script>
    </head>
    <body>
        <div id="app">
            <input type="text" v-model = "inputvalue"/>
            <button v-on:click = "handleBtnClick">提交</button>     <!--v-on用来绑定事件-->
            <ul>
                <li v-for = 'item in list'>{{item}}</li>            <!--v-for类似于for循环-->
            </ul>
        </div>

        <script>
            var app = new Vue({
                el:'#app',
                data:{
                    list:[],
                    inputvalue:''
                },
                methods:{
                    handleBtnClick:function(){
                        this.list.push(this.inputvalue)         //像list中添加button提交的值
                        this.inputvalue = ''                    //每次提交完之后把输入框内的值清空
                    }
                }
            })
        </script>
    </body>
</html>

下边我们应用组件对Todolist进行一个优化

先是全局组件
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>TodoList</title>
        <script src="./vue.js"></script>
    </head>
    <body>
        <div id="app">
            <input type="text" v-model = "inputvalue"/>
            <button v-on:click = "handleBtnClick">提交</button>     <!--v-on用来绑定事件-->
            <ul>
				<todo-item v-bind:content='item' v-for = "item in list">			
					<!-- 由于下方已经创建了全局组件,可以直接使用,但是大写字母前要加‘-’-->
					<!-- 通过v-bind语法借助content变量把item的值传给下方的TodoItem子组件-->
				</todo-item>
            </ul>
        </div>
        
        <script>
			//列表组件
			Vue.component("TodoItem",{				//vue.component用来创建一个全局组件
				props:['content'],					//通过props接收content的值
				template: " <li>{{content}}</li>"	
			})
			
            var app = new Vue({
                el:'#app',
                data:{
                    list:[],
                    inputvalue:''
                },
                methods:{
                    handleBtnClick:function(){
                        this.list.push(this.inputvalue)         //像list中添加button提交的值
                        this.inputvalue = ''                    //每次提交完之后把输入框内的值清空
                    }
                }
            })
        </script>
    </body>
</html>
再是局部组件

局部组件必须要在Vue实例中注册才能够使用

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>TodoList</title>
        <script src="./vue.js"></script>
    </head>
    <body>
        <div id="app">
            <input type="text" v-model = "inputvalue"/>
            <button v-on:click = "handleBtnClick">提交</button>     <!--v-on用来绑定事件-->
            <ul>
				<todo-item v-bind:content='item' v-for = "item in list">			
					<!-- 通过v-bind语法借助content变量把item的值传给下方的TodoItem子组件-->
				</todo-item>
            </ul>
        </div>

        <script>
			//局部组件
			var TodoItem = {
				props:['content'],
				template: " <li>{{content}}</li>"
			}
			//Vue实例
            var app = new Vue({
				components:{							//局部组件需要在实例中注册才能使用
					TodoItem: TodoItem
				},
                el:'#app',
                data:{
                    list:[],
                    inputvalue:''
                },
                methods:{
                    handleBtnClick:function(){
                        this.list.push(this.inputvalue)         //像list中添加button提交的值
                        this.inputvalue = ''                    //每次提交完之后把输入框内的值清空
                    }
                }
            })
        </script>
    </body>
</html>

接下来我们来完成删除功能

我在练习的过程中习惯把注释和笔记写在代码中,所以大家顺一遍我的代码也自然就懂啦

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>TodoList</title>
        <script src="./vue.js"></script>
    </head>
    <body>
        <div id="app">
            <input type="text" v-model = "inputvalue"/>
            <button v-on:click = "handleBtnClick">提交</button>     <!--v-on用来绑定事件-->
            <ul>
				<todo-item v-bind:content='item'
						   v-bind:index = "index"					
						   v-for = "(item,index) in list" 
						   @delete = 'handleItemDelete'>						
					<!-- 
					通过v-bind语法借助content和index变量把item和index的值传给下方的TodoItem子组件
					这里的@ 等价于 v-for
					-->
				</todo-item>
            </ul>
        </div>

        <script>
			//局部组件
			var TodoItem = {
				props:['content','index'],
				template: " <li @click = 'handleItemClick'>{{content}}</li>",		//给li绑定点击事件
				methods:{
					handleItemClick:function(){
						this.$emit("delete",this.index);	//通过$emit向外触发delete事件并传出index到父组件		
					}
				}
			}
			//Vue实例
            var app = new Vue({
				components:{							//局部组件需要在实例中注册才能使用
					TodoItem: TodoItem
				},
                el:'#app',
                data:{
                    list:[], 
                    inputvalue:''
                },
                methods:{
					//提交事件
                    handleBtnClick:function(){
                        this.list.push(this.inputvalue)         //像list中添加button提交的值
                        this.inputvalue = ''                    //每次提交完之后把输入框内的值清空
                    },
					//点击删除事件
					handleItemDelete:function(index){			
						this.list.splice(index,1)				//从index开始向后删除一项
					}
                }
            })
        </script>
    </body>
</html>
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值