再叙AngularJS

上一篇讲到AngularJS是在三月17号,已经过去整整3个月。

当时我也只是AngularJS的入门程序员,文章涉及的内容也只是针对框架的特性和Backbone进行简单的对比。

在当时,我正在进行内部平台从Backbone向AngularJS的转型。那时Backbone版的平台,已经趋于稳定,并且已经服务于多家客户。

很多读者会有疑问:既然Backbone版的平台已经稳定且有成功案例,为什么要使用AngularJS再大费周章的进行替换呢?

主要有几个考虑的因素:

1. Backbone思想简单,但操作起来极其臃肿。通过View,Model外加Collection类进行分层,代表着一个页面必须有二个类。在企业级应用中,一个页面有多个Model很正常,有些Model还有子表进行关联....

这样下来,一个模块的类就极其多,类的数量增多,系统的复杂程度就会呈几何倍数增长。

2. 依赖关系生硬。一个庞大的架构设计,如果依赖不处理好,最后的结局一定是一盘美味的“意大利面”。Backbone并没有处理模块依赖的功能,完全由用户自由设计!我当时使用RequireJS来处理。

由于RequireJS是动态加载器,不属于严格的模块管理器,一直感觉平台像是东拼西凑然后用强力胶水粘起来的...

3.代码所到之处,全是DOM操作。虽然有jQuery利器,但是真正写起来还是很痛。写过JS的程序员都懂的,一个简单的弹出框,搜集值以及还原值,至少需要2个小时 ....而且代码极其容易出现Bug,让人极其烦躁。

连着被几个使用Backbone版的平台客户虐完之后,我下定决心一定要改变这种局面。

经过三个月的奋斗,AngularJS的平台已经完成,并且成功实施2个客户!开发速度较之之前有过之而无不及,特别在面对特殊,复杂的需求时,更是得心应手。

平台的各个模块被AngularJS的依赖注入完美的结合在一起,以我目前的见识,我认为平台的前端已经达到一个完美的地步。

我如此推崇AngularJS,很多同学可能不屑一顾,网上有太多黑AngularJS的,很多人也都看到过!别着急,我们先来看看AngularJS是如何整合前台的。

自带模块化机制

AngularJS内置模块化功能,使模块化简单清晰。这个非常重要,如果你的代码完全看不出模块化,等到庞大到一定程度,那种酸爽,谁写代码谁知道!

Controller包罗万象

AngularJS抛弃View、Model的概念,使用Controller处理所有的逻辑。

说简单点,就是整合MVC在Controller中,每个模块只需要Controller即可处理,大大减少了类的数量。

并且Controller使用树形结构维护,这样不同Controller之间就可以通过树来进行沟通,很好解决了Controller间的交互。

NgModel数据双向绑定

有了它,再也不用DOM操作。Controller中都是逻辑代码,瞬间清爽很多。这点也是很多被其他框架攻击的地方,认为它太过消耗性能。

Service外加Injector

每个平台,都有基础服务,或者说公共代码。Service很好的解决了这部分问题,外加AngularJS提供的依赖注入Injector,很好解决了模块依赖,使整个平台很好的结合在一起。

Directive指令

指令相当于Web组件,很好的解决了复用的问题,简化了前台的开发。AngularJS的组件不同于JSF的服务器组件,是完全本地化,而且可以很灵活的进行定制,完全不用担心组件的过度臃肿。

AngularJS使用如上几点,基本涵盖了前台的各个方面,同时,AngularJS开放的机制以及丰富的社区,即使遇到遗漏点,也会很快找到解决方案。

当然AngularJS也有不适合的情景!如果你开发的是企业系统,邮件系统,我会力荐使用它。但是如果你开发的是网页游戏,还是不要用AngularJS了,它的双向绑定在处理复杂DOM时,确实会拖慢效率的。

那么,复杂这个边界该如何定义呢?我看过一篇文章,说是2000个,即页面双向绑定变量达到2000个,我想没有企业系统会达到这个边界。

最近很多的前端框架一下子涌现出来,例如Facebook的ReactJS,去哪儿网的Avalon,knockoutjs,Vuejs...

本着技术人员的通病,我一个一个研究过,发现或多或少都有一些问题。而所有这些框架,都喜欢和AngularJS对比一番!

要么说比AngularJS双向绑定效率高,要么说比AngularJS轻量。这让我想起了小米手机说我比苹果便宜,锤子手机说我比苹果好看...

我不否认AngularJS的缺点,更不否认这些这些框架的优点,但这么对比,就好比孙膑赛马,用自己的上等马对比别人的下等马,有耍流氓嫌疑...这更会误导一些淳朴的程序员。

不说别的,一个框架,我认为最最最最重要的是社区和更新速度!单就这两点,AngularJS甩那些框架一条街!

所以如果你要选择一款Web框架,力荐AngularJS!

时间: 2024-10-25 06:28:38

再叙AngularJS的相关文章

Oracle网络公开课《让我们捧起2014备份与恢复的世界之杯-再叙Recovery Catalog》

世界杯是全球各个国家在足球领域最梦寐以求的神圣荣耀,哪一支国家足球队能得到冠军,就是名正言顺的世界第一,整个世界都会为之疯狂沸腾.世界杯上发挥出色的球员都会被该国家奉为民族英雄永载史册,所以它亦代表了各个足球运动员的终极梦想. 玩转恢复目录,也是每个备份管理员的顶级追求,通过使用恢复目录可以将许多还原和恢复过程简化,从而缩短还原和恢复的时间.让我们一起轻松搞定所有数据库的备份信息的守候.监控和报告,一起来享受世界杯的比赛. 小贴士:世界杯(FIFA World Cup)即国际足联世界杯,是世界上

再谈angularJS数据绑定机制及背后原理—angularJS常见问题总结

Angular 的数据绑定采用什么机制,详述原理? 脏检查机制.阐释脏检查机制,必须先了解如下问题. 单向绑定(ng-bind) 和 双向绑定(ng-model) 的区别? ng-bind 单向数据绑定($scope -> view),用于数据显示,简写形式是 {{}}. 两者的区别在于页面没有加载完毕 {{val}} 会直接显示到页面,直到 Angular 渲染该绑定数据(这种行为有可能将 {{val}} 让用户看到):而 ng-bind 则是在 Angular 渲染完毕后将数据显示. ng-

EntityFramework Core Raw Query再叙注意事项后续

前言 话说通过EntityFramwork Core进行原始查询又出问题,且听我娓娓道来. EntityFramework Core Raw Query后续 当我们进行复杂查询时我们会通过原始查询来进行,我们定义如下ViewModel public class BlogViewModel { public int Id { get; set; } public string Name { get; set; } public string Url { get; set; } public str

[Unity3D]Unity3D再叙NGUI之血条及技能冷却效果

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 喜欢我的博客请记住我的名字:秦元培,我的博客地址是blog.csdn.net/qinyuanpei. 转载请注明出处,本文作者:

再谈 angularjs directive 指令

之前写过一篇了 http://www.cnblogs.com/keatkeat/p/3903673.html 但某些部分写的不太清楚,甚至有点错误,所以今天特地在这里再来谈谈. 这篇主要是说指令的隔离还有和controller的沟通. 指令的运行过程基本上我们可以简单的理解为 : template -> compile -> controller -> pre-link -> post-link 我们通常只是用到post link,但如果你的指令有嵌套,子层需要父层的一些值的话,可

再叙TIME_WAIT

所以起这样一个题目是因为很久以前我曾经写过一篇介绍TIME_WAIT的文章,不过当时基本属于浅尝辄止,并没深入说明问题的来龙去脉,碰巧这段时间反复被别人问到相关的问题,让我觉得有必要全面总结一下,以备不时之需. 讨论前大家可以拿手头的服务器摸摸底,记住「ss」比「netstat」快: shell> ss -ant | awk ' NR>1 {++s[$1]} END {for(k in s) print k,s[k]} ' 如果你只是想单独查询一下TIME_WAIT的数量,那么还可以更简单一些

再叙Java反射

Java中的反射 本文为反射的基础知识部分. 能够分析类能力的程序被称为反射(reflective). 反射机制允许程序在运行时取得任何一个已知名称的class的内部信息,容许程序在运行时加载.探知.使用编译期间未知的class.即Java的反射机制可以加载一个运行时才得知名称的class,获得其完整结构. 一.Class类 在程序运行期间,Java运行时系统始终为所有的对象维护一个被称为运行时的类型标识. 这个信息保存着每个对象所属的类足迹.虚拟机利用运行时信息选择相应的方法执行. 然而,可以

排序系列之——再叙堆排序

在我之前的文章中:<高效排序之——堆排序,归并排序.快速排序>中初步介绍了堆排序的过程,但是认真的说,自己并没有叙述的十分清楚,这篇博客,我将持续更新,表明堆排序的一个过程和核心思想. 系列博客将按照下面三个问题展开: 什么是堆? 为何堆结构可以用来排序? 怎么利用堆结构进行排序? 堆排序的算法性能如何? 总结堆的特性 本文将先回答前两个问题: 什么是堆结构? 堆结构是一棵完全二叉树,这是堆结构最为根本的性质:当然,我们通常会讨论最大堆结构和最小堆结构.这里以最大堆结构为例,说明最大堆的特点:

AngularJS之Service4

AngularJS之Service(四) 前言 前面我们讲了控制器.过滤器以及指令,这一节我们来讲讲重大内容之一服务和其中涉及到的工厂. 话题 AngularJS中服务可以说是和DI紧密联系在一起,在应用程序中我们可以通过使用服务来共享代码,服务可以被延迟实例化,为何这样说,在Angular内置的服务或者我们自定义的服务只有在注入才能被实例化,同时也就意味着当我们应用程序需要依赖于服务这一组件时才会被实例化,Angular中的服务是一个单例对象即服务中的某一个部分依赖于另外一个服务都会返回从服务