<style>
li{ list-style: none; }
#root{
width: 400px;
min-height: 400px;
box-shadow: 0 0 10px #666;
margin: 20px auto;
padding: 20px;
}
.task-input{
width: 100%;
height: 30px;
padding-left: 10px;
font-size: 13px;
border: 1px solid #ccc;
}
.task-count{
padding: 0;
height: 30px;
clear: both;
}
.task-count li:first-of-type{
float: left;
font-size: 14px;
color: red;
}
.task-count .action{
float: right;
padding: 0;
}
.task-count .action a{
font-size: 14px;
text-decoration: none;
color: #888;
display: inline-block;
padding: 2px 8px;
border: 1px solid #fff;
}
.task-count .action .active{
border-color: #888;
}
.tasks{
box-shadow: 0 0 2px #ccc;
padding: 10px;
}
.tasks .todo-list{
padding: 0;
margin: 0;
}
.tasks .todo-list .todo{
height: 40px;
line-height: 40px;
}
.tasks .todo-list .active{
color: #999;
text-decoration: line-through;
}
.tasks .todo-list .destroy{
color: red;
background: #fff;
border: none;
float: right;
margin-top: 12px;
cursor: pointer;
}
.tasks .todo-list .editing .view{
display: none;
}
.tasks .todo-list .editing .edit{
display: block;
}
.tasks .todo-list .edit{
display: none;
width: 80%;
padding: 4px 10px;
}
</style>
<div id="root">
<p>添加任务:</p>
<input
class="task-input"
placeholder="输入任务 回车即可添加任务"
type="text"
v-on:keyup.enter="addTodo"
v-model="todo"
>
<ul class="task-count" v-show="list.length">
<li>{{noCheckedLength}} 个任务未完成 </li>
<li class="action">
<a class="active" href="javascript:;">所有任务</a>
<a href="javascript:;">未完成的任务</a>
<a href="javascript:;">完成的任务</a>
</li>
</ul>
<p>任务列表:</p>
<div class="tasks">
<span v-show="!list.length">还没有添加任何任务</span>
<ul class="todo-list">
<todo-item
class="todo"
:class="{active: item.isChecked, editing: item === edtorTodos}"
v-for="(item, index) in list"
:content="item"
:index="index"
></todo-item>
</ul>
</div>
</div>
<script>
Vue.component('todo-item', {
props: ['content', 'index'],
template: `
<li>
<div class="view">
<input class="toggle" type="checkbox" v-model="content.isChecked">
<label @dblclick="edtorTodo(content)">{{content.title}}</label>
<button class="destroy" @click="deleteTodo(index)">x</button>
</div>
<input type="text"
class="edit"
v-model="content.title"
@blur="edtorTodoed(content, index)"
@keyup.13="edtorTodoed(content, index)"
@keyup.esc="cancelTodo(content)"
/>
</li>
`,
data () {
return { }
}
})
new Vue({
el: '#root',
data: {
list: [
{
title: 'xiaobai'
}
],
todo: '',
edtorTodos: '', // 记录编辑的数据
beforeTitle: ''
},
methods: {
// addTodo () {
// if(!this.todo) return;
// this.list.push({
// title: this.todo,
// isChecked: false
// })
// this.todo = '';
// },
// watch: {
// list: { // }
// },
// deleteTodo (index) { // 删除
// this.list.splice(index, 1)
// },
// edtorTodo (todo) { // 编辑
// this.beforeTitle = todo.title;
// this.edtorTodos = todo;
// },
// edtorTodoed (todo, index) { // 编辑成功
// // 如果输入框为空 则删除列表
// if(!todo.title) this.list.splice(index, 1);
// this.edtorTodos = ''
// },
// cancelTodo (todo) { // 取消编辑
// todo.title = this.beforeTitle;
// this.edtorTodos = ''
// }
},
// directives: { // 自定义组件
// 'focus': {
// update (el, binding){
// if(binding.value){
// el.focus();
// }
// }
// }
// },
computed: {
noCheckedLength () { // 计算未完成任务的数量
return this.list.filter(function(item){
return !item.isChecked
}).length
}
}
})
</script>

Vue 任务清单的更多相关文章

  1. 5. Vue - 小清单实例

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. python 全栈开发,Day89(sorted面试题,Pycharm配置支持vue语法,Vue基础语法,小清单练习)

    一.sorted面试题 面试题: [11, 33, 4, 2, 11, 4, 9, 2] 去重并保持原来的顺序 答案1: list1 = [11, 33, 4, 2, 11, 4, 9, 2] ret ...

  3. vue实现购物清单列表添加删除

    vue实现购物清单列表添加删除 一.总结 一句话总结: 基础的v-model操作,以及数组的添加(push)删除(splice)操作 1.checkbox可以绑定数组,也可以直接绑定值? 绑定数组就是 ...

  4. 任务清单小功能的实现(任务的增、删、改、查、存储)使用Vue实现

    文章目录 1.实现的效果(视频演示) 2.重点讲解(编辑的实现) 2.1 提示(官网介绍nextTick的用法) 3.编辑功能的核心代码 4.完整的代码 5.以往练习 任务清单案例(纯Vue) 实现的 ...

  5. 纯Vue实现网页日常任务清单小功能(数据存储在浏览器)

    任务清单可以极大提高我们的工作效率.哪些事情办了.哪些事情代办.哪些是紧急需要办的事情等等. 在组件化编码实战3的基础上进一步改进.将原先的数据保存的浏览器中.就可以做到关闭网页也不会丢失数据的情况 ...

  6. Vue.js优雅的实现列表清单的操作

        一.Vue.js简要说明 Vue.js (读音 /vjuː/,类似于 view) 是一套构建用户界面的渐进式框架.与前端框架Angular一样, Vue.js在设计上采用MVVM模式,当Vie ...

  7. Vue.js优雅的实现列表清单

        一.Vue.js简要说明 Vue.js (读音 /vjuː/) 是一套构建用户界面的渐进式框架.与前端框架Angular一样, Vue.js在设计上采用MVVM模式,当View视图层发生变化时 ...

  8. 基于vue的购物车清单

    <!doctype html> <html> <head> <meta charset="utf-8"> <link rel= ...

  9. 窥探Vue.js 2.0

    title: 窥探Vue.js2.0 date: 2016-09-27 10:22:34 tags: vue category: 技术总结 --- 窥探Vue.js2.0 令人兴奋的Vue.js 2. ...

随机推荐

  1. win10 mysql数据库中文乱码

    https://blog.csdn.net/weixin_41855029/article/details/80462234

  2. 基于AccessToken方式设计API

    目录 数据库设计 实现方案 应用场景:公司A有一平台需要对外提供接口给其他商户使用,考虑到安全性问题,此时可考虑采用AccessToken方案.商户在公司A平台注册一app,平台分配appId.app ...

  3. 什么是json? 什么是xml?JSON与XML的区别比较

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它使得人们很容易的进行阅读和编写.同时也方便了机器进行解析和生成.它是基于 JavaScript Prog ...

  4. babel配置文件.babelrc

    Babel是一个广泛应用的转码器,可以将ES6代码转为ES5代码,从而在现有环境执行.意味着可以使用ES6编写程序,而不用担心现有环境是否支持. Babel的配置文件是.babelrc,存放在项目的根 ...

  5. vitualbox安装centos7卡死

    在用vitualbox安装centos7的时候,每次到配置页面,都会莫名卡死,试了几遍才发现不是卡死,而是弹窗用鼠标点击是没用的,需要用tab键和回车来选中执行.

  6. 与soul上的一个妹子聊天有感

    写此篇的原因: 妹子说,我考上公务员了~,当时自己自己顿时哽咽了,不知道说什么,习惯性的说了句,恭喜恭喜啊.感受到妹子的欢喜与喜悦,我也没必要打扰她的兴致,她开心就好了嘛. 每个人的成就都是自己奋斗的 ...

  7. ubuntu---禁止更新内核

    系统内核 4.15.0-29  更新成了 4.15.0-88,降级内核并禁止更新内核 查看已安装内核:dpkg --get-selections |grep linux-image 查看正在使用的内核 ...

  8. sqli-labs less-9 --> less-10

    时间盲注: 利用时间函数,观察不同条件的等待时长:利用sleep(),benchmark()等函数,让MySQL的执行时间变长 时间盲注多于if这样的函数结合(if(expr1,expr2,expr3 ...

  9. 在iOS下-input[disabled] 颜色变浅兼容&& input[readonly]仍可获取焦点解决方法

    目标:在写input输入框时,想让其只读不写. 环境:在iPhone上 本来用的时readonly,可是readonly,居然可以获取焦点,不能弹出键盘:安卓手机完全木有问题,所以去用了disable ...

  10. 0级搭建类005-Oracle Solaris Unix安装 (11.4) 公开

    项目文档引子系列是根据项目原型,制作的测试实验文档,目的是为了提升项目过程中的实际动手能力,打造精品文档AskScuti. 项目文档引子系列目前不对外发布,仅作为博客记录.如学员在实际工作过程中需提前 ...