Vue官网todoMVC示例代码
这个示例是模仿官网示例样式和功能用我自己的方式写的,基本上没有看官网的源码,只参考自定义指令。让我们一步步来探讨一下。 要实现的功能
单条添加todo把每条todo的对应状态都存在同一个对象当中,在操作改变todo状态的时候不会被统一处理,使得每条todo都有单独的状态。 单条删除todo在每个li元素上绑定了鼠标移入和移除的事件来动态的改变每个todo的isActive,然后再使用isActive动态显示class。 双击编辑todo&&单条todo已完成<div class="content_todoList_main"
@dblclick="toEdit(list)" //双击事件 v-show="!list.isEditing" //切换元素 :class="{deleted:list.isChecked}"> //动态绑定class该表已完成todo样式 {{list.value}} <input type="text" class="content_todoList_main main_input" directives: { //自定义focus指令,需要一个binding参数做判断
"todo-focus": function (el,binding) { if (binding.value) { el.focus() } } } 通过每个todo里的isEditing属性控制show和是否可编辑两个状态,双击div之后改变当前todo的isEditing为true,从而显示为input,input失去焦点之后再通过blur事件改为false。 通过todo的idChecked来控制是否已完成,从而动态改变样式。 全部todos已完成 //全部已完成事件
todo.isChecked = todo.isChecked ? false : true)
}
待办todos数量显示{{times}}  item left
{{times}}  items left
使用了计算属性对todoLists计算,用for循环刷选出idChecked为true的累加,最后返回times。 清除全部已完成todos<div class="data_clearTodos" todo.isChecked === false)
window.localStorage.setItem("content",JSON.stringify(this.todoLists)) //以json格式存储数据
},
如果待办todos的times小于todoLists长度,就证明有已完成的todo,就可以显示“clear completed”,如果相等就说明没有已完成的todo。 三种状态筛选所有todos,已完成todos,未完成todos筛选 <div class="data_status">
<a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" :class="{active: index === dataStatusIndex}" //动态class实现tab切换 v-for="(item,index) in dataStatus" v-for循环 @click="switchStatus(index)" //切换不同tab显示内容 :key="index"> {{item}} 我这里是同时if条件句判断操作,有点麻烦,目前还没有想出来其他方案。在li元素使用三元运算符和或运算符进行操作显示不同状态的todos。 完整代码
* {
padding: 0;
margin: 0;
box-sizing: border-box;
}
input { ul,li,ol { app {width: 800px; app .header {font-size: 48px; .content { .icon-down { app .content .todos_add {width: 100%; .content_todoLists { .content_todoList { .checkBox { .content_todoList_main { .main_input { .content_todoList_delete { .show { .deleted { .show:hover { ::-moz-placeholder { ::-webkit-input-placeholder { :-ms-input-placeholder { .data { a { .data_times { .data_clearTodos { .data_status a { .data_status a:hover { .data_clearTodos a:hover { .active { {{times}} item left
{{times}} items left
|