-
Notifications
You must be signed in to change notification settings - Fork 65
/
MVVM.js
33 lines (32 loc) · 2.53 KB
/
MVVM.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
/**1.MVC是什么?
* MVC是Model-View-Controller的简写。即模型-视图-控制器。
* M和V指的意思和MVVM中的M和V意思一样。
* C即Controller指的是页面业务逻辑。
* 使用MVC的目的就是将M和V的代码分离。
* MVC是单向通信。也就是View跟Model,必须通过Controller来承上启下。
* MVC和MVVM的区别并不是VM完全取代了C,ViewModel存在目的在于抽离Controller中展示的业务逻辑,而不是替代Controller,
* 其它视图操作业务等还是应该放在Controller中实现。也就是说MVVM实现的是业务逻辑组件的重用。由于mvc出现的时间比较早,
* 前端并不那么成熟,很多业务逻辑也是在后端实现,所以前端并没有真正意义上的MVC模式。而我们今天再次提起MVC,是因为大前端的来到,出现了MVVM模式的框架。 */
/**
* MVVM是什么?
* MVVM是Model-View-ViewModel的简写,(模型-视图-视图模型)。
* 【模型】指的是后端传递的数据。
* 【视图】指的是所看到的页面。
* 【视图模型】mvvm模式的核心,它是连接view和model的桥梁。
* 它有两个方向:一是将【模型】转化成【视图】,即将后端传递的数据转化成所看到的页面。
* 实现的方式是:数据绑定。
* 二是将【视图】转化成【模型】,即将所看到的页面转化成后端的数据。
* 实现的方式是:DOM 事件监听。这两个方向都实现的,我们称之为数据的双向绑定。
* 总结:在MVVM的框架下视图和模型是不能直接通信的。
* 它们通过ViewModel来通信,ViewModel通常要实现一个observer观察者,当数据发生变化
* ViewModel能够监听到数据的这种变化,然后通知到对应的视图做自动更新,而当用户操作视图
* ViewModel也能监听到视图的变化,然后通知数据做改动,这实际上就实现了数据的双向绑定。
* 并且MVVM中的View 和 ViewModel可以互相通信
*
* ViewModel和View之间的交互通过数据绑定,而数据绑定可以实现双向的交互,
* 这就使得视图和控制层之间的耦合程度进一步降低
* MVVM与MVP最大的不同就在于View与ViewModel交互的时候使用了松耦合的双向绑定
* ,而不是像View与Presenter那样直接交互。
* ViewModel作为View的数据映射,通常View上有什么属性,
* ViewModel上也会存在相应的一个属性,这两个属性通过事件实现了双向的绑定
* 常见的MVVM框架都替我们完成了这样的绑定过程。 */