【Vue】Todo_list
一个不足为奇的小玩意,仅供参考,以下为个人的独立作品和填坑经验。
首先是布局图。
<!DOCTYPE html>
<html>
<head>
<title>Todo List</title>
<style>
li{
position: relative;
list-style: none;
text-align: center;
width: 100PX;
}
input{
border: solid 1px black;
}
div{
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
margin: auto;
height: 240px;
width: 70%;
}
img{
width: 15px;
height:15px;
}
#logo{
height: 170px;
width: 170px;
}
.haved{
background: gray;
}
.dis{
pointer-events: none;
}
}
</style>
</head>
<body>
<div id="app">
<img id="logo" src="img/vue.jpg">
<h1>Todo List</h1>
<input type="text" v-model="temp">
<button @click="Add_list">Add</button>
<ul>
<li v-for="list in List"><span v-bind:class="{haved: list.isTrue}">{{list.name}}</span><img v-bind:class="{dis: list.isTrue} "src="img/delete.jpg" @click="Remove(list.id)"></li>
</ul>
<span>已完成的项目: {{havedone}}</span>
<br/><hr>
<span>Designed by Lee</span>
</div>
<script src="lib/vue.js"></script>
<script src="lib/main.js"></script>
</body>
</html>
接下来是vue文件
var i=0;
var a = new Vue({
el: '#app',
data: {
List: [],
temp: '',
havedone:0
},
methods: {
Add_list: function(){
this.List.push({id: i,name: this.temp,isTrue:false});
i++;
},
Remove: function(id){
this.List[id].isTrue=true;
this.havedone++;
}
}
})
有点忙,就不说思路了,看看也可以懂得,不懂请留言一起交流吧!
填坑:
最初用数组的索引为List更新,不知为何,老是报错,检查数据也更跟新,就是view没更新。
后来在文档上找到了答案:
原因是:
vue实现双向数据绑定的机制是数据劫持,也就是在所有对象上有个Object.defineProperty()方法,通过setter,getter方法去更新view,而数组没有这两个方法。
解决方案:
使用内置的push()方法。(也可以使用官网上的其他方法,具体请参照文档)