zoukankan      html  css  js  c++  java
  • Vue 任务清单

    <style>
    li{ list-style: none; }
    #root{
    	 400px;
    	min-height: 400px;
    	box-shadow: 0 0 10px #666;
    	margin: 20px auto;
    	padding: 20px;
    }
    .task-input{
    	 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;
    	 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>
    
  • 相关阅读:
    小波变换的引入,通俗易懂
    Leetcode 437. Path Sum III
    Leetcode 113. Path Sum II
    Leetcode 112 Path Sum
    Leetcode 520 Detect Capital
    Leetcode 443 String Compression
    Leetcode 38 Count and Say
    python中的生成器(generator)总结
    python的random模块及加权随机算法的python实现
    leetcode 24. Swap Nodes in Pairs(链表)
  • 原文地址:https://www.cnblogs.com/xiaobaiv/p/9292004.html
Copyright © 2011-2022 走看看