是一个桥梁
Vue是 view和model之间的一个桥梁, 通俗来讲就是:
- 数据发生变化, 中间做了什么, 视图就变了;
- 视图发生改变,中间做了什么, 数据就变了; 这个中间做的, 就指的是vue;
数据驱动应用
改数据界面就会发生变化
MVVM
M:model,数据
V:view,视图,Dom
V:视图
M:model数据
数据发生变化->视图变化
视图变化->影响数据
数据响应式
数据响应式是MVVM
框架的一大特点,通过某种策略可以感知数据的变化。
Vue中利用了JS语言特性Object.defifineProperty()
,通过定义对象属性getter/setter
拦截对属性的访问。
具体实现是在Vue
初始化时,会调用initState
,它会初始化data
,props
等,这里着重关注data
初始化;
具体流程
初始化数据,包括props、methods、data、computed和watch;
initData核心代码是将data数据响应化;
initData里面的observe方法返回一个Observer实例;
Observe对象根据数据类型执行对应的响应化操作;
defifineEeactive定义对象属性的getter/setter,getter负责添加依赖,setter负责通知更新;
Dep负责管理一组Watcher,包括watcher实例的增删及通知更新;
Watch: 解析一个表达式并收集依赖,当数值变化时触发回调函数,常用于$watch API和指令中;
每个组件也会有对应的watcher,数值变化会触发其update函数导致重新渲染;
渲染
vue如何将模板转换为html?
vue工作原理
数据发生变化, 重新执行渲染函数,得到的结果就是虚拟dom,把虚拟dom变成真实dom的过程。
数据发生变化,通过模板引擎解析出的数据结果是虚拟dom, 再通过js引擎把虚拟dom,渲染到真实dom上;
什么是虚拟DOM
虚拟DOM(Virtual DOM)是对DOM的JS抽象表示,它们是JS对象,能够描述DOM结构和关系。应用 的各种状态变化会作用于虚拟DOM,最终映射到DOM上。
vue的核心作用
一个数据,将来可能通过服务器等动态变化,
数据变了 , 改界面, 界面改了, 改数据;
例:数据绑定到视图中,数据通过定时器或者服务器发生变化,
视图界面相应的就会变,反过来,用户在视图中输入一些内容,
或者通过绑定事件点击,视图变了, 就会导致相应的数据发生了变化;