mvvm
在MVC里,View是可以直接访问Model的!从而,View里会包含Model信息,不可避免的还要包括一些业务逻辑。 MVC模型关注的是Model的不变,所以,在MVC模型里,Model不依赖于View,但是 View是依赖于Model的。不仅如此,因为有一些业务逻辑在View里实现了,导致要更改View也是比较困难的,至少那些业务逻辑是无法重用的。
MVVM在概念上是真正将页面与数据逻辑分离的模式,它把数据绑定工作放到一个JS里去实现,而这个JS文件的主要功能是完成数据的绑定,即把model绑定到UI的元素上。
有人做过测试:使用Angular(MVVM)代替Backbone(MVC)来开发,代码可以减少一半。
此外,MVVM另一个重要特性,双向绑定。它更方便你同时维护页面上都依赖于某个字段的N个区域,而不用手动更新它们。
1.旧浏览器逐渐淘汰,移动端需求增加
2.前端交互越来越多,功能越来越复杂
现如今,前端可谓是包罗万象,产品形态五花八门,涉猎极广。高大上的技术库和框架,酷炫的运营活动页面和好玩的H5小游戏,不过这些一两个文件的小项目并非是前端技术的主要应用场景,更具商业价值的是复杂的web应用,它们功能完善,页面繁多,为用户提供了完整的产品体验,例如新闻趣味站,在线购物平台, 社交网络,金融信贷应用,音乐互动社区,视频分享平台,打车出行平台等等,这些网站和平台的共同特点就是交互多,功能复杂。
3.架构从传统的后台MVC向REST API+前端MV*迁移
传统的后台MVC方式,是当前端与后端发生一些数据交互的时候,会刷新整个页面,这样的用户体验是非常差的,因此,我们通过ajax的方式,和后端REST API做通信,异步刷新页面的某个区块,来优化和提升体验,同时把MV*拿到前端来做。
MVVM框架
MVVM框架主要包括三个部分Model、View和ViewModel,Model指的是数据部分,对应到前端就是一些Javascript对象,View指的视图部分,对应到前端就是DOM,ViewModel就是连接数据和视图的中间件,在MVVM的框架下视图和数据是不能直接通信的,它们通过ViewModel来通信,ViewModel通常要实现一个observer观察者,当数据发生变化,ViewModel能够监听到数据的这种变化,然后通知到对应的视图做自动更新,而当用户操作视图,ViewModel也能监听到视图的变化,然后通知数据做改动,这实际上就实现了数据的双向绑定。以上便是MVVM的一些基本概念。
MVVM框架的主要应用场景
1)针对具有复杂交互逻辑的前端应用
2)提供基础的架构抽象
3)通过Ajax数据持久化,保证前端用户体验
好处就是当前后端进行一些数据交互的时候,前端可以通过Ajax请求对后端做数据持久化,不需要刷新整个页面,只需要改动DOM里需要改动的那部分数据和内容,特别是对于移动端应用场景,刷新页面的代价太昂贵,会重新加载很多资源,虽然有些资源会被缓存,但是页面的DOM、JS、CSS都会被浏览器重新解析一遍,因此,移动端页面经常会做成SPA单页应用,在这个基础上就诞生了很多MVVM框架,如Angular、React、Vue
Vue.js的核心思想
Vue.js的核心思想包括两个方面:数据驱动和组件化
数据驱动:DOM是数据的一种自然映射,在vue.js中只需要操作数据,vue.js通过directives指令去对DOM做一层封装,当数据发生变化,会通知指令去修改对应的DOM,数据驱动DOM变化,DOM是数据的一种自然映射,vue.js还会对操作做一些监听,当我们修改视图的时候,vue.js监听到这些变化,从而去改变数据,这样就实现了数据的双向绑定。
组件化的目的是扩展HTML元素,封装可重用的代码
组件设计原则:
1)页面上每个独立的可视/可交互区域视为一个组件,
2)每个组件对应一个工程目录,组件所需要的各种资源在这个目录下就近维护,
3)页面不过是组件的容器,组件可以嵌套自由组合形成完整的页面。