Vue的双向数据绑定原理是什么( 四 )


MVC允许在不改变视图的情况下改变视图对用户输入的响应方式,用户把对View的操作交给了处理,在中响应View的事件调用Model的接口对数据进行操作,一旦Model发生变化便通知相关视图进行更新 。
如果前端没有框架,只使用原生的html+js,MVC模式可以这样理解 。将html看成view;js看成,负责处理用户与应用的交互,响应对view的操作(对事件的监听),调用Model对数据进行操作,完成model与view的同步(根据model的改变,通过选择器对view进行操作);将js的ajax当做Model,也就是数据层,通过ajax从服务器获取数据 。
MVVM与MVC区别
MVVM与MVC两者之间最大的区别就是:MVVM实现了对View和Model的自动同步,也就是当Model的属性改变时,我们不用再自己手动操作Dom元素来改变View的变化,而是改变其属性后,该属性对应的View层数据会自动改变 。
如,Vue实例中的data相当于Model层,而层的核心是Vue中的双向数据绑定,当Model发生变化时View也可以跟着实时更新,同理,View变化也能让Model发生变化 。
总的看来,MVVM比MVC精简很多,不仅简化了业务与界面的依赖,还解决了数据频繁更新的问题,不用再用选择器操作DOM元素 。因为在MVVM中,View不知道Model的存在,Model和也观察不到View,这种低耦合模式提高代码的可重用性 。
Vue 组件 data 为什么必须是函数,data什么时候可以适用对象?
在 Vue 里,一个组件本质上是一个拥有预定义选项的一个 Vue 实例 。
组件复用时所有组件实例都会共享data,如果data是对象就会造成一个组件修改data以后会影响到其他所有组件,所以需要将data写成函数,每次用到就调用一次函数获得新的数据 。
当我们使用new Vue()的方式的时候,无论我们将data设置为对象还是函数都是可以的,因为new Vue()的方式是生成一个根组件,该组件不会复用,也就不存在共享data的情况
vue中 key 值的作用
回答1:
key是为Vue中的vnode标记的唯一id,通过这个key,我们的diff操作可以更准确、更快速 。
diff算法的过程中,先会进行新旧节点的首尾交叉对比,当无法匹配的时候会用新节点的key与旧节点进行比对,然后找出差异.
diff程可以概括为:oldCh和newCh各有两个头尾的变量和,它们的2个变量相互比较,一共有4种比较方式 。如果4种比较都没匹配,如果设置了key,就会用key进行比较,在比较的过程中,变量会往中间靠,一旦>表明oldCh和newCh至少有一个已经遍历完了,就会结束比较,这四种比较方式就是首、尾、旧尾新头、旧头新尾.
回答2:
当 Vue 用 v-for 正在更新已渲染过的元素列表时,它默认用“就地复用”策略 。如果数据项的顺序被改变,Vue 将不会移动 DOM 元素来匹配数据项的顺序,而是简单复用此处每个元素,并且确保它在特定索引下显示已被渲染过的每个元素 。key的作用主要是为了高效的更新虚拟DOM 。
为什么使用v-for时必须添加唯一的key?
key 的特殊属性主要用在 Vue 的虚拟 DOM 算法,在新旧 nodes 对比时辨识。如果不使用 key,Vue 会使用一种最大限度减少动态元素并且尽可能的尝试修复/再利用相同类型元素的算法 。使用 key,它会基于 key 的变化重新排列元素顺序,并且会移除 key 不存在的元素 。
有相同父元素的子元素必须有独特的 key 。重复的 key 会造成渲染错误 。
什么是vue的计算属性
答:在模板中放入太多的逻辑会让模板过重且难以维护,在需要对数据进行复杂处理,且可能多次使用的情况下,尽量采取计算属性的方式 。
好处:
①使得数据处理结构清晰;
②依赖于数据,数据更新,处理结果自动更新;