1、框架是为了解决开发的复杂度,Vue框架就是为了简化模板渲染、事件绑定和用户交互等问题而产生的。
Vue是MVVM模型,即视图(View)-视图模型(ViewModel)-模型(Model)。
有了Vue的ViewModel,数据以及与数据相关的界面是联动的,中间的桥梁就是ViewModel。
2、当创建一个新的Vue实例时【new Vue()】时,()括号内传递的是一个包含了数据、模板、挂载元素、方法、生命周期钩子等的对象,这些都被添加到Vue的响应系统中。
响应式系统,即可以通过修改属性的值来让视图发生变化(更新渲染)。
3、V2.0是通过object.defineproperty来完成数据响应式的(缺点是无法感知新增对象或者新增的属性)。
Object.defineProperty(obj, prop, descriptor)
obj:需要定义属性的对象
prop:需要定义的属性
descriptor:属性的描述描述符
返回值:返回此对象
①、利用Object.defineProperty将对象的属性转化成getter/setter,以便拦截对象赋值与取值操作,称之为Observer;
②、解析DOM提取其中的指令与占位符并赋与不同的操作,称之为Compiler;
③、将Compile的解析结果与Observer中的对象建立关联,Observer监听到象数据变化,接收通知并更新DOM,称之为Watcher;
④、建立一个公共对象入口以便接收配置和协调三者,这就是Vue。
V3.0是通过class proxy来完成数据响应式的。
4、VUE中有很多以$开头和以_(下划线)的属性,其中以$开头可以让开发者使用,以_下划线开头的为内置的,不建议开发者使用。
5、为了提高渲染效率,Vue会把模板编译成虚拟DOM树(虚拟DOM树一定是单根的),然后在生产真实的DOM树。
当数据更改时,将重新编译成虚拟DOM树,然后对比前后两棵虚拟DOM树,仅仅将差异部分反映到真实的DOM中,这样可以最小程度地改动真实DOM,提高页面的渲染效率。
对比的算法是diff算法。
vue有三种方式生产虚拟DOM树:
①、在加载元素内部写,即将outerHTML作为模板;
②、在template中写;
③、在render中用函数直接创建虚拟节点树。
上面从上到下优先级逐渐提升。
6、VUE注入(也就是挂载和绑定)是为了绑定this和数据响应,也可以完成所有设置后再挂载,vm.$mount(“#demo”);
数据冻结(设置数据对象为保护)必须在挂载之前,挂载完毕后再进行数据冻结无效。
7、前端开发框架有很多,可以组合使用,以目前开发来看,肯定要熟练几种才好开展项目,Vue.js比较流行,与其他框架结合也很好。
8、Vue的生命周期图
可以在代码中体会Vue的生命周期图(加想看的事件函数处理):
Vue.js的基本语法
{{message}}
//去掉警告
Vue.config.productionTip=false;
var FixedObj={
message:'hello,Vue!',
NowTime:new Date()
};
var methods={
change(){
this.message='hello VsCode!'
},
}
//数据冻结指令必须在挂载之前执行,一旦绑定再执行该指令则失效
//Object.freeze(FixedObj);
var vm=new Vue({
el:"#demo",//挂载即绑定
data:FixedObj,
methods,
created:function(){
console.log('初始化后:'+this.message+" 时间:"+this.NowTime)
},
mounted:function(){
console.log('绑定后:'+this.message+" 时间:"+this.NowTime)
},
updated:function(){
console.log('修改后:'+this.message+" 时间:"+this.NowTime)
}
})