vue写todolist

温馨提示:使用之前要下载vue.js和mui.css


<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<link rel="stylesheet" type="text/css" href="css/mui.css"/>
		<script src="js/vue.js"></script>
		<style type="text/css">
			.done{
				color: gray;
				text-decoration: line-through;
			}
			.content{
				width: 1200px;
				margin: 20px auto 0;
			}
		</style>
	</head>
	<body>
		<div id="app" class="content">
			<p><input type="text" value="" v-model="current.name" placeholder="添加事项" @keyup.enter="addItem"/></p>
			<ul class="mui-table-view">
				<li class="mui-table-view-cell" v-for="item in filterList">
					<span :class="{'done' : !item.done}" v-if="currentItem != item" @dblclick="editItem(item)">{{item.name}}</span>
					<input type="text" v-model="currentItem.name" v-if="currentItem == item" @keyup.enter="doneItem(item)" value="" />
					<div>
						<button class="mui-badge-danger" @click="deleteItem(item)">删除</button>
						<button class="mui-badge-purple" @click="completed(item)">{{item.done ? "完成" : "取消"}}</button>
					</div>
				</li>
			</ul><br />
			<button class="mui-badge-green" @click="setFlag('all')">({{items.length}})全部</button>
			<button class="mui-badge-blue" @click="setFlag('done')">({{doneNum}})完成</button>
			<button class="mui-badge-primary" @click="setFlag('undo')">({{undoNum}})待完成</button>
		</div>
	</body>
	<script>
		/*封装一个存取localstorage的对象*/
		var store = {
			save(key,value){   //存数据
				console.log("存数据");
				localStorage.setItem(key,JSON.stringify(value));
			},
			fetch(key){    //取数据
				console.log("取数据");
				return JSON.parse(localStorage.getItem(key))||[];
			}
		}
		new Vue({
			el : "#app",
			data : {
				current : {name:"",done : "true"},
				items : [
					{name : "javascript",done : "true"},
					{name : "c++",done : "true"},
					{name : "php",done : "true"},
					{name : "java",done : "true"}
				],
				currentItem : {},
				flag : "all"
			},
			methods : {
				addItem (){
					console.log(this.current);
					if(this.current.name.length==0){return};
					console.log(this.current.name + "=============");
					this.items.unshift(this.current);
					this.current = {name : "",done : "true"};
				},
				deleteItem(item){
					let index = this.items.indexOf(item);
					this.items.splice(index,1);
				},
				completed(item){
					console.log("完成");
					item.done = !item.done;
				},
				editItem(item){
					this.currentItem = item;
				},
				doneItem(item){
					item = this.currentItem;
					this.currentItem = {};
				},
				setFlag(str){
					this.flag = str;
				}
			},
			computed : {
				filterList(){
					console.log(this.flag);
					return this.items.filter(item => {
						if(this.flag == "done"){
								return !item.done;
						}else if(this.flag == "undo"){
							
								return item.done;
						}
						else{
							return true;
						}
					})
				},
				doneNum(){
					return this.items.filter(item => {return !item.done}).length||0;
				},
				undoNum(){
					return this.items.filter(item => {return item.done}).length||0;
				}
			},
			watch :{
				filterList : {
					handler : function () {
						store.save("todolist",this.filterList);
					},
					deep : true   //深监控
				}
			},
			created () {
//				alert("hello");
				this.items = store.fetch("todolist");
				console.log("数据" , this.items);
			}
		})
	</script>
</html>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值