vue 入门, todoList
# 实现逻辑:
> * 技术栈
> 1. 生命周期,creatd( 创建后执行)
> 2. methods': 调用事件方法,结果不会缓存
> 3. Watch : 监听器,监听输入的字数
> 4. Filters: 过滤器,时间
> 5. prevent : 修饰符,阻止默认事件
> 6. computed: 计算属性,计算结果会被缓存
<template>
<div>
<H3>柚子小哥哥</H3>
// 这是一个输入框,双向绑定,给一个回车事件
<input type="text" v-model="inputVal" @keydown.enter="add" />
// 这是一个为完成的,通过计算属性来得出,没有完成的条数
<h3>未完成 ( {{ NoList }} )</h3>
<ul>
// 这是一个循环遍历一个数组,v-show,这里是显示在页面上,因为添加的时候,已经是false,现在取反就是显示在页面上。
<li v-for="(item, index) in TodoList" :key="index" v-show="!item.dome">
// 这是一个复选框,给一个点击事件,和一个修饰符,阻止默认事件在事件方法,传一个对象化,和布尔值,true,一个切换功能
<input type="checkbox" @click.prevent="change(item, true)" />
// 这是一个双击修改数据,先if判断取反,判断条件是缩影不等于负一,在双击的方法里面穿一个对象和下标
<span v-if="index != updateIndex" @dblclick="update(item, index)">
// 输入框出来的内容
{{ item.inputVal }}
</span>
// 这是一个输入框,判断下标等于负一,同时双向绑定内容,一个回车事件,和一个失去焦点事件
<input
v-if="index == updateIndex"
type="text"
v-model="item.inputVal"
@keydown.enter="updateServe"
@blur="updateServe"
/>
// 这是一个点赞,功能,说白就是在添加的,一个数量的累加。
<span @click="Str(item)"> 点赞: {{ item.Strt }} </span>
// 这是一个事件的过滤器可以准确的计算出来。你什么时候发布的信息,
<span> {{ item.createTime | FiltersTime }} </span>
// 这是一个删除功能
<span @click="del(index)"> ×</span>
</li>
</ul>
//一个计算属性,计算出完成的条数
<h3>已完成 ( {{ YesList }} )</h3>
// 这是已完成的内容,和上面的内容差不多是相反的
<li v-for="(item, index) in TodoList" :key="index" v-show="item.dome">
<input type="checkbox" checked @click.prevent="change(item, false)" />
<span v-if="index != updateIndex" @dblclick="update(item, index)">
{{ item.inputVal }}
</span>
<input
v-if="index == updateIndex"
type="text"
v-model="item.inputVal"
@keydown.enter="updateServe"
@blur="updateServe"
/>
<span @click="Str(item)"> 点赞: {{ item.Strt }} </span>
<span> {{ item.createTime | FiltersTime }} </span>
<span @click="del(index)"> ×</span>
</li>
<h3>
筛选部分
</h3>
// 这是一个诗选功能,一个下拉列表
<select v-model="screen">
<option value="">请选择</option>
<option value="whole">全部</option>
<option value="NO">未完成</option>
<option value="YES">已完成</option>
</select>
// 筛选成功之后,在fo循环遍历出来的数据
<ul>
<li v-for="(item, index) in ShowList" :key="index">
<span> {{ item.inputVal }}</span>
</li>
</ul>
</div>
</template> <script>
export default {
data() {
return {
screen: "",
// 筛选添加的数组
ShowList: [],
// 一个双向绑定的空字符串
inputVal: "",
// 操作的是这数组
TodoList: [],
// 声明一个变量为-1,用来判断双击修改
updateIndex: -1,
// 修改要存放一个空字符串中
kong: "",
// 字数默认为0
small: 0,
// 不能超过为10
Big: 10,
// 这个是一个监听字体数量,输入的字体超过范围,则不能添加,这个ref;true就是可以添加的到页面的数据
referring: true,
};
}, // 这是一个声明周期一个方法,创建后自行,
created() {
// 这几行代码的意思就是,localStorage。初始化本地存储
let TodoList = localStorage.TodoList;
if (TodoList) {
this.TodoList = JSON.parse(TodoList);
}
// 这个是发布的事件排序
this.TodoList.sort(function(a, b) {
return b.createTime - a.createTime;
});
},
// 这个就是筛选功能,
watch: {
screen(newSerl) {
this.ShowList = [];
switch (newSerl) {
case "whole":
this.ShowList = this.TodoList;
break;
case "NO":
this.TodoList.map((item) => {
if (!item.dome) {
this.ShowList.push(item);
}
});
break;
case "YES":
this.TodoList.map((item) => {
if (item.dome) {
this.ShowList.push(item);
}
});
break;
}
},
},
// 这个就是一个时间的一个过滤器,
filters: {
FiltersTime(msg) {
let data = new Date();
let noe = data.getTime();
let time = (noe - msg) / 1000 / 60;
let Str = "";
if (time <= 1) {
Str = "刚刚";
} else if (time <= 2) {
Str = "1分钟前";
} else if (time <= 3) {
Str = "2分钟前";
} else {
let data = new Date();
data.setTime(msg);
// 这是一个模版字符串,时,分,秒
Str = `${data.getHours()}:${data.getMonth()}:${data.getSeconds()}`;
}
return Str;
},
},
// 计算属性,计算法已完成和未完成的条数
computed: {
//未完成的方法
NoList() {
let num = 0;
this.TodoList.map((item) => {
if (!item.dome) {
num++;
}
});
return num;
},
// 已完成的监听的条数
YesList() {
let num = 0;
this.TodoList.map((item) => {
if (item.dome) {
num++;
}
});
return num;
},
},
// 调用事件的方法,结果不会缓存
methods: {
// 点赞拱功能,一个对象的累加,保存到本地存储
Str(item) {
item.Strt++;
this.serve();
},
// 添加
add() {
// 这个就是判断,输入的字数超过了规定的字数,就是不执行一下的方法,return返回过去
if (!this.referring) {
alert("超过字数限制");
return;
}
// 这是一个判断,判断输入框不能为空,
if (this.inputVal != "") {
alert("添加成功");
this.TodoList.push({
inputVal: this.inputVal,// 一个输入框的双向绑定的一个
dome: false, // 这是一个复选框切换
Strt: 0, // 点赞功能
createTime: new Date().getTime(), // 这是一个时间戳
});
} else {
alert("不能为空");
}
// 清空
this.inputVal = "";
// 调用保存方法
this.serve();
// 这是一个时间的排序
this.TodoList.sort(function(a, b) {
return b.createTime - a.createTime;
});
},
// 复选框的切换功能
change(item, checked) {
if (checked) {
item.dome = true;
} else {
item.dome = false;
}
},
// 双击修改
update(item, index) {
this.kong = item.inputVal;
this.updateIndex = index;
},
// 还原数据
updateServe() {
this.updateIndex = -1;
this.inputVal = "";
this.serve();
},
// 删除
del(index) {
this.TodoList.splice(index, 1);
this.serve();
},
// 保存
serve() {
localStorage.TodoList = JSON.stringify(this.TodoList);
},
},
};
</script>
<style scoped></style>
## 实现效果:

vue 入门, todoList的更多相关文章
- VUE 入门笔记
前端的MVVM概念今年来也算是如火如荼,了解完 MVVM的概念,也该找个去尝试下 首先我先试了下 国内小而美的 VUE 试着照着文档敲出入门文件,内容都在注释里 <!doctype html&g ...
- Vue 入门之组件化开发
Vue 入门之组件化开发 组件其实就是一个拥有样式.动画.js 逻辑.HTML 结构的综合块.前端组件化确实让大的前端团队更高效的开发前端项目.而作为前端比较流行的框架之一,Vue 的组件和也做的非常 ...
- 一、Vue入门
vue官网:https://cn.vuejs.org/ 学习路线:VueJs2.0建议学习路线 在浏览器上安装 Vue Devtools工具 1.vue入门 <script src=" ...
- wepack+sass+vue 入门教程(三)
十一.安装sass文件转换为css需要的相关依赖包 npm install --save-dev sass-loader style-loader css-loader loader的作用是辅助web ...
- wepack+sass+vue 入门教程(二)
六.新建webpack配置文件 webpack.config.js 文件整体框架内容如下,后续会详细说明每个配置项的配置 webpack.config.js直接放在项目demo目录下 module.e ...
- wepack+sass+vue 入门教程(一)
一.安装node.js node.js是基础,必须先安装.而且最新版的node.js,已经集成了npm. 下载地址 node安装,一路按默认即可. 二.全局安装webpack npm install ...
- vue入门学习(基础篇)
vue入门学习总结: vue的一个组件包括三部分:template.style.script. vue的数据在data中定义使用. 数据渲染指令:v-text.v-html.{{}}. 隐藏未编译的标 ...
- Vue 入门指南 JS
Vue 入门指南 章节导航 英文:http://vuejs.org/guide/index.html 介绍 vue.js 是用来构建web应用接口的一个库 技术上,Vue.js 重点集中在MVVM模式 ...
- vue入门 vue与react和Angular的关系和区别
一.为什么学习vue.js vue.js兼具angular.js和react的优点,并且剔除了他们的缺点 官网:http://cn.vuejs.org/ 手册:http://cn.vuejs.org/ ...
- Vue学习记录第一篇——Vue入门基础
前面的话 Vue中文文档写得很好,界面清爽,内容翔实.但文档毕竟不是教程,文档一上来出现了大量的新概念,对于新手而言,并不友好.个人还是比较喜欢类似于<JS高级程序设计>的风格,从浅入深, ...
随机推荐
- Python所有异常错误的父类--BaseException
BaseException # 所有异常的基类 +-- SystemExit # 解释器请求退出 +-- KeyboardInterrupt # 用户中断执行(通常是输入^C) +-- Generat ...
- Java 第十一届 蓝桥杯 省模拟赛 字母重新排列
字母重新排列 题目 问题描述 将LANQIAO中的字母重新排列,可以得到不同的单词,如LANQIAO.AAILNOQ等,注意这7个字母都要被用上,单词不一定有具体的英文意义. 请问,总共能排列如多少个 ...
- Java实现 蓝桥杯 算法提高 01背包
算法提高 01背包 时间限制:1.0s 内存限制:256.0MB 问题描述 给定N个物品,每个物品有一个重量W和一个价值V.你有一个能装M重量的背包.问怎么装使得所装价值最大.每个物品只有一个. 输入 ...
- Java实现 LeetCode 274 H指数
274. H指数 给定一位研究者论文被引用次数的数组(被引用次数是非负整数).编写一个方法,计算出研究者的 h 指数. h 指数的定义: "h 代表"高引用次数"(hig ...
- Java实现 LeetCode 114 二叉树展开为链表
114. 二叉树展开为链表 给定一个二叉树,原地将它展开为链表. 例如,给定二叉树 1 / \ 2 5 / \ \ 3 4 6 将其展开为: 1 \ 2 \ 3 \ 4 \ 5 \ 6 class S ...
- Java实现 LeetCode 68 文本左右对齐
68. 文本左右对齐 给定一个单词数组和一个长度 maxWidth,重新排版单词,使其成为每行恰好有 maxWidth 个字符,且左右两端对齐的文本. 你应该使用"贪心算法"来放置 ...
- Java实现 LeetCode 27 移除元素
27. 移除元素 给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额 ...
- java实现人员排日程
某保密单位机要人员 A,B,C,D,E 每周需要工作5天,休息2天. 上级要求每个人每周的工作日和休息日安排必须是固定的,不能在周间变更. 此外,由于工作需要,还有如下要求: 所有人的连续工作日不能多 ...
- Java实现串的简单处理
串的处理 在实际的开发工作中,对字符串的处理是最常见的编程任务.本题目即是要求程序对用户输入的串进行处理.具体规则如下: 把每个单词的首字母变为大写. 把数字与字母之间用下划线字符(_)分开,使得更清 ...
- 本地存储 localStorage
本地存储localStorage 概念:window对象下面的属性,html5新增的,将5M大小的数据存储本地的浏览器上面. 浏览器支持存储5M大小 本地存储localStorage特点 本地存储属于 ...