<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>My todo list</title>
<style>
*{
list-style: none;
outline: none;
border: none;
box-sizing: border-box;
margin: 0;
padding: 0;
}
.app h1,.app p{
text-align: center;
margin-top: 10px;
}
#app{
font-family: 'Avenir', Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
color: #2C3E7A;
}
.app{
width: 640px;
margin: 0 auto;
background: #c5c5c5;
padding:30px 10px;
border: 1px solid #2C3E7A;
margin-top: 10px;
position: relative;
box-shadow: 0 0 10px #2C3E7A;
}
.app:before{
content: '';
width: 2px;
border-left: 1px dashed #2C3E7A;
border-right: 1px dashed #2C3E7A;
height: 100%;
position: absolute;
top: 0;
left: 51px;
}
.app li{
cursor: pointer;
height: 45px;
line-height: 45px;
padding-left: 65px;
position: relative;
border-bottom: 1px dashed #2C3E7A;
}
.todo-box li input{
text-align: center;
width: 40px;
height: auto;
position: absolute;
top: 0;
bottom: 0;
left: 0;
margin:0 auto;
border: none;
-webkit-appearance: none;
-moz-appearance: none;
-ms-appearance: none;
-o-appearance: none;
appearance: none;
}
.todo-box li input:after{
content: '✔';
line-height: 43px;
font-size: 20px;
color: #f0f0f0;
text-shadow: 0 -1px 0 #bfbfbf;
}
.app li.finished{
text-decoration: line-through;
color: #4fc08d;
}
.app li.finished input:after{
color: #4fc08d;
text-shadow: 0 1px 0 #669991;
bottom: 1px;
position: relative;
}
.typeInput input{
width: 81%;
color: #2C3E7A;
font-size: 24px;
border: 1px solid #2C3E7A;
padding: 1%;
transition: all 0.3s ease-in-out;
}
.typeInput input:focus {
outline: none;
border-color: #2C3E7A;
box-shadow: 0 0 10px #2C3E7A;
}
</style>
</head>
<body>
<div id="app" class="app">
<h1 v-text='title'></h1>
<p class='typeInput'>
<input type="text" v-model='newText' v-on:keyup.enter='addNewlist'>
</p>
<ul class="todo-box">
<li v-for='item in items' v-bind:class='{finished:item.isFinished}'>
<input type="checkbox" v-on:click='toggleFinish(item)'>
{{item.text}}
</li>
</ul>
</div>
<script type="text/javascript" src="http://cn.vuejs.org/js/vue.js"></script>
<script type="text/javascript">
const STORAGE_KEY = 'todos-vuejs';
const Store = {
fetch() {
return JSON.parse(window.localStorage.getItem(STORAGE_KEY)||'[]');
},
save( items ) {
window.localStorage.setItem(STORAGE_KEY,JSON.stringify(items));
}
};
const app = new Vue({
el: '#app',
data: {
title: 'My todo list',
// items:[
// // {
// // text:'Learn CSS',
// // isFinished:true
// // },
// // {
// // text:'Learn javascript',
// // isFinished:false
// // }
// ],
items: Store.fetch(),
newText: ''
},
//watch深度监听函数,监听的是items的变化
//只要有新的输入内容就会触发,
watch: {
items: {
//val和oldval这里都是对象
handler(items) {
// console.log(items);
Store.save( items );
},
deep:true
}
},
//
methods:{
toggleFinish(item) {
// console.log(item.isFinished);
item.isFinished=!item.isFinished;
},
//3、输入后按enter键盘的事件
addNewlist() {
let _self = this;
//3.1 如果不为空就将刚刚输入的内容以对象的形式,追加到items数组对象内部,
//默认新追加的是没完成的为false
if( _self.newText ) {
_self.items.push({
text: _self.newText,
isFinished: false
});
}
// console.log(_self.newText);
// console.log(this);
//3.2 同时清空input输入框
_self.newText = '';
}
}
});
</script>
</body>
</html>
vue.js - todolist
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 3.单选按钮 选择一个网站 51code Google 选择的网站是: {{selected}} new Vue(...
- 前言 本文将会介绍 MVVM 和 Vue.js 的相关话题. 由于本人写了一些关于 Vue.js 封装的文章, 并...
- 目前理解来说,不管哪种js他们的本质都是,javaScript。而这些到都是经过包装编写,编写变成另外一种规则。更...
- 一:MVVM框架 MVVM框架的应用场景: 1、针对具有复杂交互逻辑的前端应用2、提供基础的架构抽象3、提供aj...
- 三大问之第一问-是什么Vue.js是一套构建用户界面的渐进式框架。和大家耳熟能详的其他前端框架一样,可用于前端产品...