赞
踩
todos:[
{id: 1, title: '示例内容1' , completed: true},
{id: 2, title: '示例内容2' , completed: false},
{id: 3, title: '示例内容3' , completed: false}
]
:key
绑定数据ID,设置事件完成状态:class = "{completed: todo.completed}"
,最后在相应位置书写插值表达式。<li v-for="todo in todos" :key="todo.id" :class="{completed: todo.completed}">
<div class="view">
<input class="toggle" type="checkbox" v-model="todo.completed">
<label>{{todo.title}}</label>
<button class="destroy"></button>
</div>
</li>
v-show
进行数据的显示和隐藏。v-show与v-if区别
v-show 用于数据的显示和隐藏,v-if用于数据的创建与销毁
依据数组中数据的有无,进行其余事项的展示和隐藏
<section class="main" v-show="todos.length">
<footer class="footer" v-show="todos.length">
filter()
来筛选符合条件的数据用到了语法糖
//普通写法
remaining: function(){
return this.todos.filter(function(todo){
return !todo.completed;
}).length;
}
computed:{
//展示未完成数据的个数
remaining: function(){
return this.todos.filter(todo => !todo.completed).length;
}
}
使用computed
中的get
方法得到数据的反馈
allDone: {
get: function(){
return this.remaining === 0;
}
}
使用computed
中的set
方法设置全选
allDone:{
set: function(value){
//value 全部选框的状态
this.todos.forEach(todo => {
todo.completed = value;
})
}
}
通过forEach()
来遍历数组元素。
通过filter()
来过滤符合条件的数组元素。
input
来添加数据信息input
中设置v-model
绑定数据。newTodo: ' '
v-model="newTodo"
@keyup
来触发函数的执行,函数逻辑,先判断输入数据是否为空,空则返回。如果输入的有数据,则通过数组的push()
方法将数据对象添加到数组中。addTodo(){
var newtodo = this.newTodo.trim();
if(!newtodo) return;
this.todos.push({
id: this.todos.length+1,
title: newtodo,
completed: false
});
this.newTodo = '';
}
tips : 在函数中使用trim(),可以减少数据的交互,降低损耗。如果在input中设置trim(),每次更改过程中有空格都会运行,而在函数中使用trim(),只有触发时才会出现运行。
首先获取到当前数据todo
,通过indexOf()
来获取当前todo的索引,然后再通过数组方法splice()
来删除当前todo
元素
removeTodo(todo){
var index = this.todos.indexOf(todo);
this.todos.splice(index,1);
}
首先判断一下当前是否存在已完成事项,如果有,则通过v-show
来展示。
completed all
v-show="remaining===todos.length"
removeCompleted(){
this.todos = this.todos.filter(todo=>!todo.completed);
}
首先设置editingTodo
来存储编辑的数据,设置titleBeforeEdit
来存储编辑之前的数据。
//存储正在编辑的todo的内容
editingTodo:null ,
//存储正在编辑的原始内容
titleBeforeEdit:''
对将要编辑的事件双击触发操作
<label @dblclick="editTodo(todo)">{{todo.title}}</label>
通过对比todo
和editingTodo
来判断是否加入editing
类。
:class="{completed: todo.completed ,editing:todo===editingTodo}">
directives:{
'需要设置的标签'(el,binding){
//el指设置的元素标签,binding指一个对象
} }
取消编辑内容:
(1)将正在编辑的内容设置为空;
(2)将todo中title内容赋值给titleBeforeEdit
editDone(todo){
this.editingTodo = null;
todo.title = todo.title.trim();
if(!todo.title){
this.removeTodo(todo);
}
}
如果回车和鼠标blur都会触发删除操作,则需要判断当前元素是否存在,不存在则返回,存在则进行删除操作。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。