1.MVVM模式:分为M层(数据层)V层(视图)VM层(双向绑定和监听)VM层负责监听数据层和视图层,数据层或视图层发生变化时,会主动通知另一层去改变。MVVM模式主要针对数据进行开发,MVP模式主要根据DOM(视图层)进行开发,相比之下MVVM模式代码量很小。2.组件化将页面分为一块块的,然后每一块可以方便增删,同时还可以复用。3,模板语法简单数据绑定v-text=””,v-html=””,{{}}以上三个指令都是文本渲染,区别在于v-html解析DOMV-**=”js表达式”{{js表达式}}计算属性,方法,侦听器计算属性:computed:{属性名A:function(){}}Set(A发生变化时调用)和Get好处:减少冗余数据,使用缓存(只有被依赖的属性(A发生变化时不会)发生变化时,才重新计算,当计算很复杂的计算时性能会提高很多)适用于:某个属性值是通过十分复杂的逻辑运算得来或者可以这样说,某些属性是随着其它属性变化而变化的。方法:methods:{方法名:function(){}}无缓存机制,每次刷新都重新执行。适用于不立即调用的地方,如做事件的监听方法等等。侦听器:watch:{被侦听的属性名:function(){}}被侦听的属性发生改变时,执行函数,也具备缓存功能。适用于:当需要在数据变化时执行异步或开销较大的操作时,这个方式是最有用的。样式绑定(v-bind:CSS属性=”值”)class绑定对象语法:V-bind:class=”样式名:控制属性”;更强大的地方在class=”可以是属性名或者计算属性”使用计算属性意味着这里可以通过更强大的操作产生一个class属性名。数组语法:V-bind:class=”[class1class2,class3]”改变class1,class2,class3的值。(感觉没有对象强大啊)Style绑定:对象语法V-bind:style=”样式名”;多重值如v-bind:style=”{display:[‘-webkit-box’,’-ms-flexbox’,’flex’]}”可以用作浏览器适配,从最后一个渲染。数组语法V-bind:style=[]条件渲染V-show=”ok”这个指令只会改变元素display属性,并不会像ifelse一样重新渲染DOM,所以v-show不能用于TemplateV-if和v-else中间不可以有其它元素。区别点:一般来说,v-if有更高的切换开销,而v-show有更高的初始渲染开销。因此,如果需要非常频繁地切换,则使用v-show较好;如果在运行时条件很少改变,则使用v-if较好。非常重要的一个特性,VUE在重新渲染时会复用原来的DOM元素(这样可能产生一些问题如Input框的输入内容不会被清空,可以通过添加key来证明这两个input是完全独立的,从而不会产生复用)列表渲染(在v-for块中,我们拥有对父作用域属性的完全访问权限)也可以循环对象VUE只是监听了数组的几个变异方法,如push,pop,shift,unshift,splice(),sort(),reverse(),直接通过下标改变不可以。直接改变数组的引用也可以(无需注意性能问题,Vue为了使得DOM元素得到最大范围的重用而实现了一些智能的、启发式的方法,所以用一个含有相同元素的数组去替换原来的数组是非常高效的操作。)。或者通过VUE的SET(属性,键,值)或VUE实例上的SET添加新属性或修改现有属性(一Vue.set(属性名(),键,值);或vm.$set(属性名,键,值)来修改或添加属性(添加属性可以避免Vue无法探测普通的新增属性(比如this.myObject.newProperty='hi')))Template可以作为占位符,不被渲染liv-for=”nineven(numbers)”{{n}}/li可以利用函数对numbers数组处理V-for的优先级比v-if的优先级高,也就是liv-for=todointodosv-if=!todo.isComplete{{todo}}/li先执行v-for,再执行v-if(不理解的在遍历对象时,是按Object.keys()的结果遍历,但是不能保证它的结果在不同的JavaScript引擎下是一致的。)组件的使用细则写符合规范的UI代码,然后再DOM元素上使用is属性去渲染。例子:子组件中的data必须是function(){return{对象}},因为组件是多次复用的,每一个组件中的data是通过function返回的一个新对象,每一个组件有自己的数据,这样组件与组件之间互相不影响。