用vue写一个清单

这篇博客介绍如何利用Vue.js实现一个具备本地存储、完成/未完成状态切换、增删改功能的待办事项清单。HTML、JavaScript代码示例提供,并展示了最终效果。

用vue写一个清单

清单功能
可以实现本地存储
有完成和未完成
可以增加删除
可以修改内容
html部分

<div id="app">
	<div class="top">
		<div>
			<label>ToDoList</label>
			<input type="text"placeholder="添加ToDo" v-model.trim="temp" @keyup.enter="addItem()"/>	
		</div>
	</div>
	<div class="content">
		<h2>正在进行</h2>
		<div class="list">
			<div class="item" v-for="item in dolist" :key="item.title">
				<input type="checkbox" v-model="item.done"/>
				<span
				@dblclick="editTemp=item.title;item.state=1"
				v-show="item.state===0"
				>{{item.title}}</span>
				<input
				type="text" 
				v-model="editTemp" 
				v-show="item.state==1"
				@keyup.enter="item.title==editTemp;item.state=0;"
				@blur="item.title=editTemp;item.state=0;"
				@keyup.esc="item.state=0;editTemp=item.title;"
				v-focus="item.state==1"
				>
				<button @click="delItem(item)">×</button>
			</div>
		</div>
		<h2>已经完成</h2>
		<div class="list">
			<div class="item" v-for="item in undolist" :key="item.title">
				<input type="checkbox" v-model="item.done"/>
				<span
				@dblclick="editTemp=item.title;item.state=1"
				v-show="item.state===0"
				>{{item.title}}</span>
				<input
				type="text" 
				v-model="editTemp" 
				v-show="item.state==1"
				@keyup.enter="item.title==editTemp;item.state=0;"
				@blur="item.title=editTemp;item.state=0;"
				@keyup.esc="item.state=0;editTemp=item.title;"
				v-focus="item.state==1"
				>
				<button @click="delItem(item)">×</button>
			</div>
		</div>
	</div>
</div>

js

<script type="text/javascript">
	new Vue({
		el:"#app",
		//修改内容
		directives:{
			"focus":{
				update(el,binding){
					if(binding.value){el.focus()}
				}
			}
		},
		// 存储数据
		watch:{
			"list":{
				handler(nval){
					localStorage.setItem("list",JSON.stringify(this.list))
				},
				deep:true
			}
		},
		computed:{
			//未完成
			dolist(){
				return this.list.filter(item=>!item.done)
			},
			// 完成
			undolist(){
				return this.list.filter(item=>item.done)
			}
		},
		methods:{
			//删除
			delItem(item){
				var ind = this.list.findIndex(value=>value.title==item.title)
				this.list.splice(ind,1)
			},
			//添加
			addItem(){
				var item ={title:this.temp,done:false,state:0}
				this.list.unshift(item)
				this.temp=""//清空
			}
		},
		data:{
			//通过本地存储来获取数据
			list:JSON.parse(localStorage.getItem("list")||"[]"),
			temp:"",//临时标题
			editTemp:""
		}
	})
</script>

css自行添加
效果图如下:
在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值