Vue.js,通常简称Vue,是一款友好,多用途且高性能的JavaScript框架,能够帮助我们创建可维护性和可测试性更强的代码。
它是一款渐近式的JavaScript框架。渐进式就是如果你有一个现成的服务端应用,也就是非单页应用,可以将Vue.js作为该应用的一部分嵌入其中,带来更加丰富的交互体验。
2013年7月28日,尤雨溪,英文名叫Evan You,在Github上第一次为Vue.js提交代码,当时还不叫Vue.js,仓库中看出,这时的名字叫做Element,后来被更名为Seed.js;
2013年12月7日,尤雨溪在Github上发布了新版本0.6.6,将项目正式改名为Vue.js,并且把默认的指令前缀变成了 v- 。这一版本,代表Vue.js正式问世;
2014年2月1日,尤雨溪将Vue.js 0.8 发布在了国外的Hacker News网站,这代表它首次公开发布。
2015年10月26日,Vue.js终于迎来了1.0.0版本的发布;
2016年10月1日,祖国的生日,同时也是Vue.js 2.0发布的日子;
Vue.js 2.0 引入了非常多的特性,其中一个明显的效果是Vue.js变得更轻,更快了,引入了虚拟DOM,支持JSX和TypeScript,支持流失服务端渲染,支持跨平台的能力等。
Vue.js 会自动通过状态生成DOM,并将其输出到页面上显示出来,这个过程叫做渲染。通常,在运行时应用内部的状态会不断发生变化,此时需要不停地重新渲染。这时如何确定状态中发生了什么变化?
变化侦测就是用来解决这个问题的,它分为两种类型:
我们以
student {
name:'小明';
age:18;
school:{
sname:'XXXX';
adress:'XXX';
}
}
为数据案例
第一步,我们使用Object.defineProperty进行封装,转变为getter/setter的形式来追踪变化;
第二步:收集依赖,即把用到数据student中属性的地方收集起来,getter就是收集依赖;如果属性发生改变则在setter中触发依赖;比如,我们修改了name:“小红” ,setter触发依赖;
第三步:getter收集依赖,我们把这些依赖存放到Dep类中,它专门帮我们管理依赖,收集,删除或发生通知。比如,上一步修改了name,触发了setter,那么settter就会通知Dep;
第四步:属性发生变化之后,通知谁——Watcher。比如,上一步,setter已经通知Dep,但Dep只是用于存放的依赖地方,不能修改所用到依赖的地方,所以我们要通知Watcher角色,然后它再通知到 使用了name这个属性的其他地方,告诉它们,name数据已经修改了,你们要更新了;
第五步:封装Observer类,将数据内所有属性(子属性)都转换为getter/setter的形式。比如,我们看到student对象里面的其中一个属性school也是一个对象,所以我们也要把这个school对象中的属性都转为getter/setter属性进行侦测。
无法侦测到一个新属性被添加到对象中,也无法侦测到一个属性从对象中删除,为了解决这个问题Vue.js提供了两个API——vm.$set / vm.$delete

如有写的不好的地方,或不懂的地方,欢迎大家来找我讨论。
脚踏实地,一步一步来!!!