网上的mvvm框架好多,整理一下网上的评论,仁者见仁,智者见智吧 ,比如
vuejs angular knockoutjs avalonjs emberjs WinJS(前三个学习过,后边都没看过)
兼容性:angularJS(IE9), EmberJS(IE8), KnockoutJS(IE6), WinJS(IE9),avalonjs(IE10)
Vue.js
我们的玉溪大神开发的
优点:
- 简单:官方文档很清晰,比 Angular 简单易学。
- 快速:异步批处理方式更新 DOM。
- 组合:用解耦的、可复用的组件组合你的应用程序。
- 紧凑:~18kb min+gzip,且无依赖。
- 强大:表达式 & 无需声明依赖的可推导属性 (computed properties)。
- 对模块友好:可以通过 NPM、Bower 或 Duo 安装,不强迫你所有的代码都遵循 Angular 的各种规定,使用场景更加灵活。
缺点:
1.个人项目。
2.更新太快。
AngularJS
优点:
- 动态视图:以前从来没有想过js可以如此扩展HTML的属性,但是AngularJs做到了,它替我们静态的HTML加了很多扩展性功能,有一种让HTML由死变活的感觉。
- 完善:是一个比较完善的前端MVW框架,包含模板,数据双向绑定,路由,模块化,服务,依赖注入等所有功能,模板功能强大丰富,并且是声明式的,自带了丰富的
Angular 指令。 - Google维护:AngularJS有Google来维护,无疑有了一个强大的后台,对于推广和维护明显比Vue.js和avalon有优势,社区也非常活泼,能够很好促进它的发展。
- AngularJS & Ionic:Ionic: Advanced HTML5 Hybrid Mobile App
Framework,这俩就是一个好基友,Ionic通过用AngularJS为了创建一个框架,最适合开发的丰富和强大的应用程序。上次于知乎答了一个相关问题:
做webapp开发,性能和效率最好的框架和打包app平台分别是哪个?
- 汤威的回答,详细可以见这里。
缺点:
- 大而全:学习起来有难度,对于我来讲学习曲线很曲折,比较难理解一些。
- 推翻重写:前段时候逛社区发现AngularJS2.0会把之前的推翻重写,两个框架的改变很大,基本是两个框架了,等于是说等到2.0出来后又需要从头开始,不过又说回来,@徐飞老师的[翻译]有关Angular
2.0的一切 · Issue #8 · xufei/blog · GitHub这篇文章很好说明了AngularJS2.0的变化。 - 不支持IE8以下,貌似2.0变得只支持移动端了,等到出来后再看吧。
knockoutJS
1、MVVC架构了解—viewmodel
把后端逻辑放到前端处理,前端把view与viewmodel之间绑定,并且对viewmodel的数据进行逻辑处理。而后端则是通过ajax把viewModel和model进行数据交换。(meteor则是进一步,直接在前端操作MongoDB(子数据库),然后子数据库和主数据库会自动进行数据同步)
2、数据绑定
angular的数据绑定是使用脏检查事件。
knockoutJS可以选择为one way ,one time,two way绑定
ko.observalbe:对数据的get和set ko.computed:实时计算数据 applyBindings:对viewmodel进行应用。
data-binding对函数和数据绑定:clickeventvalue ext等值的绑定
Simple List:ko.observableArray
3、SPA
其实后台并没有太大改变,逻辑依然,只是把页面的处理逻辑交给了前端。让前端更加像一个APP。
SPA:Single Page Application。使用ajax和服务器及数据库交换数据:服务器传输时只需要传输json,不传页面。使界面更加友好。个人感觉KnockoutJS适合开发SPA的原因就是MVVM的模型,多个Page共享同一个ViewModel,使信息传递更加简单。而angular则再进一步,使用Service、directive、controller给一个应用划分好层次,使结构清晰。ps:个人比较喜欢不同的page使用不同的控制器。
4、总结
KnockoutJS把逻辑移到前端后,但个人感觉只是提供一个雏形,而没有像angular一样进一步的给逻辑分层,让逻辑更加清晰,使代码维护更加简单。KnockoutJS仅提供了数据绑定功能实现了ViewModel。而angular则给人感觉实现了前端的MVC分层。
但是无可否认的是,knockoutJS使用的开发思路和jQuery一致,都是先渲染DOM,再操作DOM。因此不需要太大的改变开发思路,导致学习成本没angular那么高。如果作为一个学习理解SPA和MVVM概念的框架,是比较好的。