案例来自于vue.js的官方示例:https://cn.vuejs.org/v2/examples/todomvc.html,我在案例学习过程中,试着对其中的一些知识点进行记录:

一、浏览器数据存储,为了方便,此处将数据存储到客户端的缓存中,使用localStorage,他的主要api有

localStorage.getItem(key)和localStorage.setItem(key,value)

二、对于localStorage中的数据采取json数组形式保存,因此在保存value和获取时候需要先做json和string的转化,ECMA5提供了两个转化方法:

将指定格式数据转为json:JSON.parse(string);将json转为string:JSON.stringify(json)


var TODO_KEY="vue-todo";

var todoStorage={
fetch:function(){
var todos=JSON.parse(localStorage.getItem(TODO_KEY)||'[]')
todos.forEach(function(todo,index){
todo.id=index;
});
todoStorage.uid=todos.length;
return todos;
},
save:function(todos){
localStorage.setItem(TODO_KEY,JSON.stringify(todos));
}
}


三、使用hashchange监听浏览器地址栏变化

在单页应用同页跳转的情况下,添加监听window.addEventListener('hashchange',onHashChange)来获取地址栏的变化,然后可以使用window.location.hash来监听到地址栏的后缀变化,如果xxx.html#/all,此处值为"#/all",获取地址栏的值变化,此处主要根据地址栏的visibility过滤不同的内容

function onHashChange(){
var visibility=window.location.hash.replace(/#\/?/,'');
if(filters[visibility]){
app.visibility=visibility;
}else{
window.location.hash='';
app.visibility='all';
}
}
window.addEventListener('hashchange', onHashChange)
onHashChange()

三、json或数组的过滤

如果要根据todos中的completed的状态过滤掉对应的子项,需要使用filter,如过滤掉非completed的项,是如下写法


function(todos){
return todos.filter(function(todo){
return !todo.completed;
});


四、json或者数组中的某一项,修改

如果要将todos的子项中的内容进行修改,需要使用forEach操作,如将所有completed修改为true,如下写法:


this.todos.forEach(function(todo){
todo.completed=true;
});


五、自定义vue标签


<input class="edit" type="text"
v-model="todo.title"
v-todo-focus="todo == editedTodo"
@blur="doneEdit(todo)"
@keyup.enter="doneEdit(todo)"
@keyup.esc="cancelEdit(todo)">


在此input标签中,我们希望如果是正在编辑的todo时候,自动被选中,此处自定义了一个v-todo-focus标签,此标签的格式如下


 directives: {
'todo-focus': function (el, value) {
if (value) {
el.focus()
}
}
}


指令定义,官方提供了五个钩子函数来供我们使用,分别代表了一个组件的各个生命周期

bind: 只调用一次,指令第一次绑定到元素时调用,用这个钩子函数可以定义一个在绑定时执行一次的初始化动作。

inserted: 被绑定元素插入父节点时调用(父节点存在即可调用,不必存在于 document 中)。

update: 被绑定元素所在的模板更新时调用,而不论绑定值是否变化。通过比较更新前后的绑定值,可以忽略不必要的模板更新(详细的钩子函数参数见下)。

componentUpdated: 被绑定元素所在模板完成一次更新周期时调用。

unbind: 只调用一次, 指令与元素解绑时调用。

在这里其他几个都好理解,关于模板更新(update)这里,本人的理解是:该指令所在的模板有变化而需要重新渲染的时候,比如当一个输入框的model发生了变化就会触发指令。当然此处说的比较模糊,具体的还有待研究。

六、v-cloak标签

vuejs做的界面加载过程中会闪现vue的变量,如{{msg}},在标签加上v-cloak,在css定义可以解决此问题

[v-cloak] { display: none;}

<section class="main" v-show="todos.length" v-cloak>

这段 CSS 的含义是,包含 v-cloak (cloak n. 披风,斗篷;vt. 遮盖,掩盖) 属性的 html 标签在页面初始化时会被隐藏。

在 vuejs instance ready 之后,v-cloak 属性会被自动去除,也就是对应的标签会变为可见。问题来了,怎么才算是 ready 呢?这就需要了解 vuejs instance 的生命周期了

七、使用watch完成localStorage的写入操作


watch: {
todos: {
handler: function (todos) {
todoStorage.save(todos)
},
deep: true
}
},


在todo-list的应用中,整个操作过程中的增删改查操作很多,系统使用todos来保存每次操作后的结果,然后使用watch监控todos的变化,完成缓存的更新,注:deep表示深复制,即元素发生变化,也会导致他的变化

八、计算属性和观察属性

在todo-list有一个全选按钮,如果选中的时候,所有任务被标记为完成,如果任务全部完成,此标记也会被标记选中

1、官方实现,使用computed的get和set操作allDone,减少了元素定义,也更为清晰


 allDone: {
get: function () {
return this.remaining === 0
},
set: function (value) {
this.todos.forEach(function (todo) {
todo.completed = value
});
}


九、数组的操作-使用push和slice进行添加数组元素和删除数组元素,略

十、使用filters进行格式化,此处其实可以使用computed进行实现


filters: {
pluralize: function (n) {
return n === 1 ? 'item' : 'items'
}
},


十一、在做var app=new Vue()的时候,我们可以不用指定元素,等其他初始化完成后,最后一步再使用mount进行绑定


// mount
app.$mount('.todoapp')


十二、对于todo的编辑和展示切换

对于某一条todo,我们要求双击进行切换到编辑模式,回车切换到展示模式,我们的处理是:对于此todo,两种模式在页面上共存,通过method方法,改变对应的class,达到切换的目的。


<li v-for="todo in filteredTodos"
class="todo"
:key="todo.id"
:class="{ completed: todo.completed, editing: todo == editedTodo }">
<div class="view">
<input class="toggle" type="checkbox" v-model="todo.completed">
<label @dblclick="editTodo(todo)">{{ todo.title }}</label>
<button class="destroy" @click="removeTodo(todo)"></button>
</div>
<input class="edit" type="text"
v-model="todo.title"
v-todo-focus="todo == editedTodo"
@blur="doneEdit(todo)"
@keyup.enter="doneEdit(todo)"
@keyup.esc="cancelEdit(todo)">
</li>
代码可以看到,显示todo的地方有一个div用于显示,一个input用于编辑,根据editedTodo来确定是否给li绑定editing的class,如果绑定后,class如下,显示edit,隐藏view todo-list li.editing .edit {
display: block;
width: 506px;
padding: 12px 16px;
margin: 0 0 0 43px;
} .todo-list li.editing .view {
display: none;
}


参考原文:www.cnblogs.com/jyyzzjl/p/6252279.html

TodoMVC Example知识点总结的更多相关文章

  1. [vue案例的知识点]todo-list

    文章的原材料来自于vue的官方示例:https://cn.vuejs.org/v2/examples/todomvc.html,我们在学习过程中,试着对其中的一些知识点进行记录: 一.浏览器数据存储, ...

  2. ASP.NET Core 中的那些认证中间件及一些重要知识点

    前言 在读这篇文章之间,建议先看一下我的 ASP.NET Core 之 Identity 入门系列(一,二,三)奠定一下基础. 有关于 Authentication 的知识太广,所以本篇介绍几个在 A ...

  3. ASP.NET MVC开发:Web项目开发必备知识点

    最近加班加点完成一个Web项目,使用Asp.net MVC开发.很久以前接触的Asp.net开发还是Aspx形式,什么Razor引擎,什么MVC还是这次开发才明白,可以算是新手. 对新手而言,那进行A ...

  4. UWP开发必备以及常用知识点总结

    一直在学UWP,一直在写Code,自己到达了什么水平?还有多少东西需要学习才能独挡一面?我想对刚接触UWP的开发者都有这种困惑,偶尔停下来总结分析一下还是很有收获的! 以下内容是自己开发中经常遇到的一 ...

  5. C#高级知识点&(ABP框架理论学习高级篇)——白金版

    前言摘要 很早以前就有要写ABP高级系列教程的计划了,但是迟迟到现在这个高级理论系列才和大家见面.其实这篇博客很早就着手写了,只是楼主一直写写停停.看看下图,就知道这篇博客的生产日期了,谁知它的出厂日 ...

  6. lucene 基础知识点

    部分知识点的梳理,参考<lucene实战>及网络资料 1.基本概念 lucence 可以认为分为两大组件: 1)索引组件 a.内容获取:即将原始的内容材料,可以是数据库.网站(爬虫).文本 ...

  7. DoraCMS 源码知识点备注

    项目需要研究了下DoraCMS这款开源CMS,真心做的不错:).用的框架是常用的express 4 + mongoose,代码也很规范,值得学习. 源码中一些涉及到的小知识点备注下: https:// ...

  8. atitit 商业项目常用模块技术知识点 v3 qc29

    atitit 商业项目常用模块技术知识点 v3 qc29 条码二维码barcodebarcode 条码二维码qrcodeqrcode 条码二维码dm码生成与识别 条码二维码pdf147码 条码二维码z ...

  9. HTML5知识点总结

    HTML5知识点总结(一) 一.HTML新增元素 1.IE9版本以下支持HTML5的方法 <!--[if lt IE9]> <script src="http://cdn. ...

随机推荐

  1. android studio报butterknife错误

    Error:Execution failed for task ':shipper:javaPreCompileDebug'.> Annotation processors must be ex ...

  2. Java读书计划和分享

    写在前面 为什么要写这些呢? 接触java已经有三年多了,感触颇多,比如从0到60,只要勤实践.勤思考,很快就可以入门,从60分到满分极致,则单单不是凭借工作年限或者什么就可以.曾经也有过一段迷茫时期 ...

  3. 【万字长文】Dubbo 入门总结 ,一款高性能的 Java RPC 框架

    这篇文章是我学习整理 Dubbo 的一篇文章,首先大部分内容参考了官网 + 某硅谷的视频,内容讲解进行了重新编排,40多张图片,也都是我修改重制的,虽然一万多字,但是其实也可以看出来,更多的内容集中在 ...

  4. App自动化《元素定位方式、元素操作、混合应用、分层设计、代码方式执行Pytest 命令》

    坚持原创输出,点击蓝字关注我吧 作者:清菡 博客:oschina.云+社区.知乎等各大平台都有. 目录 一.App 元素定位方式 二.元素操作 三.测试混合应用 四.以代码的方式执行 Pytest 命 ...

  5. [ASIS 2019]Unicorn shop

    点击进去之后是一个购买独角兽的界面,有四种类型的独角兽,前三种的价格比较便宜,最后的独角兽价格比较贵. 我们先尝试购买前三种独角兽,输入id,然后price输入9 然后就告诉我商品错了,可能复现靶场这 ...

  6. flask中的重定向,渲染,反转视图函数

    在学习flask中,重定向,渲染,反转老是不怎么明白,今天明白了其中的点了,来给大家分享下 rend_templete()这个函数就是一个渲染的作用,渲染html的东西. url_for是反转视图函数 ...

  7. 手把手教你写DI_2_小白徒手撸构造函数注入

    小白徒手撸构造函数注入 在上一节:手把手教你写DI_1_DI框架有什么? 我们已经知道我们要撸哪些东西了 那么我们开始动工吧,这里呢,我们找小白同学来表演下 小白同学 :我们先定义一下我们的广告招聘纸 ...

  8. 没有它你的DevOps是玩不转的,你信不?

    摘要:架构的选择对于DevOps的实践是至关重要的,从某种程度上来说,架构就是DevOps这场战役的粮草,它是支撑着DevOps成功落地的重要前提. 善用兵者,役不再籍,粮不三载.取用于国,因粮于敌, ...

  9. basic english

    color/visual see look color dark light beautiful shade black blue brown clear gray green orange red ...

  10. linux下安装Zookeeper 3.4.14

    1.下载Zookeeper 3.4.14(https://zookeeper.apache.org/) wget https://mirror.bit.edu.cn/apache/zookeeper/ ...