谷歌AngularJS框架 - 值得冒风险?

TGu*_*ond 65 javascript c# javascript-framework angularjs

我被要求为我们的一个客户构建一个小型Web应用程序,并认为这可能是一个尝试构建Web应用程序的不同框架的好机会.我们构建的大多数应用程序都基于asp.net Web表单,我们还没有在MVC架构中做过任何事情,但我渴望用更合理的工具以更加结构化的方式开始构建Web应用程序.

我一直在研究像asp.net MVC这样的东西看起来相当不错,但我想知道有什么可以说使用像Google AngularJS框架这样的东西.

如果可能的话,我仍然希望能够使用c#编写我的服务器端代码,并且我还没有研究过AngularJS,知道这是否可行,尽管我假设我可以使用Web服务.

有没有人有使用AngularJS开发应用程序的经验,如果有的话,它是怎么做的,你能指出我在一些教程的正确方向吗?

psy*_*yho 104

在过去的几个月里,我们一直在AngularJS开发一个Swing胖客户端应用程序的端口,我认为值得推荐.至于学习资源,请查看官方项目网站(并确保阅读教程)和邮件列表(作者非常有帮助).

好东西:

  • 可测性很强
  • 双向数据绑定是一个非常强大的功能,一旦你"获得它"它就会非常有用
  • IMO AngularJS模板比使用数据属性或"特殊"CSS类来标记执行某些操作的元素要脆弱得多
  • 它大大减少了使用jquery插件的需要,因为在AngularJS中实现该功能非常容易(像树,标签,手风琴等)

坏事:

  • 学习曲线似乎相当陡峭(我没有太大的问题,但我看到有些人在努力)
  • AngularJS中的验证暂时很糟糕(一个新的实现正在进行中)
  • 并非所有的库/ jquery插件都能很好地与Angular一起使用,通常你必须将它们包装起来
  • API仍然在被抛光,所以期待突破性变化(不是频繁发布和非常好的更改日志的大问题)
  • 在页面上有数千个绑定之前,性能是可以的 - 大部分时间这不是限制,但有时这可能是一个问题.

一些指针(如果您决定学习AngularJS):

  • 有些人真的过度使用小部件.根据我的经验,使用HTML"partials"+服务要好得多,而且只是零星地使用小部件.
  • 阅读图书馆的源代码 - 这是学习角度的最佳场所
  • 服务/控制器中没有DOM操作
  • 如果你使用css类绑定到事件,你做错了

  • 术语"陡峭学习曲线"的常见用法已经错误地植根于英语,并且在数学上具有完全相反的含义,@ MarkoDumic在学术方面是正确的(陡峭的学习曲线意味着在很短的时间内学习很多),但是在英语口语中,陡峭的学习曲线意味着"难以学习".它根植于语言,使用科学上不正确但常用的版本比"正确"版本更好,这样大多数人都会理解你的意思.请参阅:http://english.stackexchange.com/questions/6209/what-is-meant-by-steep-learning-curve (13认同)
  • Angular是一个相当大的框架,一开始就要学习很多东西(包括依赖注入等概念),所以我认为合适的词是"陡峭的". (12认同)
  • 当你说"陡峭"(快速增加)参考"学习曲线"时,你是否意味着"平坦"(缓慢增加)? (4认同)

Voj*_*jta 26

+1 @ psycho的答案

AngularJS是客户端框架,因此您可以在服务器上使用任何语言.它的设计与jQuery很好地配合,重点是测试......

以下是您可能会发现有用的一些资源:

一些示例应用:

适用于SenchaTouch的适配器:https://github.com/tigbro/sencha-touch-angular-adapter

适用于jQ Mobile的适配器:https://github.com/tigbro/jquery-mobile-angular-adapter

随意在邮件列表上提出任何问题!

我们仍然处于测试阶段,但Google已经有几个内部应用程序,由AngularJS提供支持.


更新(2012年7月26日):

AngularJS v1.0已经发布.

对于一些公开的AngularJS驱动的应用程序,请查看http://builtwith.angularjs.org


noo*_*rub 20

恕我直言为客户开发一些他们可能难以支持的东西是不专业的.您必须记住,您的客户很难聘请经验丰富的Angular专业人员,或培训他们自己的员工来攀登"陡峭的学习曲线".此外,到目前为止,文档并不是那么好.您可以在一会儿之后轻松回答"我如何将我的闪亮Angular应用程序连接到我客户的数据库?" 您的客户可以在未来的某个时间轻松获取现有代码并使其适应未来的潜在需求吗?说实话.

将简单可靠的LAMP开发与Angular进行比较.对于"小型Web应用程序",我真的相信专业人员应该给他的客户一些可维护和简单的东西.

这并不是说Angular不酷和性感等等.但除了最新的框架时尚之外,你还要考虑客户未来的可维护性.轻轻踩是我的推荐.首先使用Angular建立自己的网站,然后在一些信任的客户端给予您神话般的新技能之前,先看看您的想法.

  • @maxisam - 是的,我做到了.当jQuery代码变得成熟时,我开始将它推广到商业客户端.我只是觉得早期采用存在人们在为客户做出决策时应该负责任地考虑的危险,这就是全部.我正在构建一个应用程序作为生产代码的测试; 如果它表现良好并且我们觉得AngularJS代码库是稳定可靠的,那么我们将把它作为公司标准.这就是我想说的. (9认同)
  • 采取的点.我最后没有使用angular构建应用程序. (2认同)
  • 这是有趣的.当jQuery刚刚离开时,我打赌你用同样的理由拒绝jQuery. (2认同)
  • 李小龙说,这就像一根手指指向月球.不要专注于手指,否则你将错过所有那种天国的荣耀.我同意,我们现在在我工作的地方积极使用AngularJS,而且它非常出色.我在这里提出的核心建议仍然适用于新技术,特别是那些正在考虑将它们用于实时客户端应用程序的"顾问",他们甚至在自己实施该技术之前:使用<最新热门构建自己的<技术解决方案>技术>首先,看看你的想法,然后再在一些信任的客户身上赋予你神话般的新技能. (2认同)

Sut*_*bey 11

我记得在几个月前读了这篇SO帖子,脑子里也有同样的问题,我们决定继续使用AngularJS,以及我们对这个项目做出的最好决定.

我们正在使用AngularJS + ASP.NET MVC4 REST WebAPI.

在这样一个不错的客户端Javascript MVC框架之后,最需要的是,你只需要在服务器端与业务逻辑层进行交互的REST API层,而在服务器端没有MVC(ASP.NET MVC/Spring/Structs会感觉像旧的记忆).

你会发现Angular-UI好的附加组件(特别是网格)

在我们的项目完成后不久,我们可能会提出一些我们为开源世界编写的指令.


use*_*524 11

几个月来,我一直在研究AngularJS的优点,以作为我正在创造的产品的核心框架.AJS的许多方面都值得学习.是的,有一点学习曲线,但它非常值得,特别是如果你希望更多地控制客户端功能.

JQuery在运行时操作DOM,而AJS在JS渲染生命周期中处于自己的位置.这允许您通过创建HTML元素和属性来教授DOM新技巧.这非常非常强大.正如您所能做的那样,无论您的目的和需求如何,都会引入新的Element行为.在AJS中,这些自定义HTML属性/元素称为指令.由于能够制作自己的指令,您可以构建当前HTML所没有的功能,从而推出现在和将来在所有现代浏览器上运行的功能.在诱导新行为的许多方法中,AJS似乎是最安全的方向,因为他们选择如何实施它.

在AJS中,JQuery的性能大幅提升.

我喜欢双向数据绑定的简单性,以及客户端MVC模式中关注点的分离,如上所述,它提供了极大的可测试性.范围对象是视图(HTML),模型(您的数据)和自定义控制器之间的粘合剂.范围提供对父属性的访问,并且可以在兄弟级别隔离,这对于某些可重用模板很重要.

模板可以在您的应用程序中创建和重用,可以包含0个或更多自定义指令.

我一直在使用PRISM和MEF等框架,但我发现AJS具有这些.NET框架中存在的大部分相同功能,但占用空间为29K.有传言说他们正致力于延迟加载,如果提供它将提供一些非常有趣的LOB类型功能.

有许多UI框架是为AJS构建的,但您可以根据需要包装任何第三方控件库,只需付出一些努力.诀窍是确保当这些第三方控件引起更改时,确保使用其apply方法正确通知AJS.

如果您在VS 2012中将AJS与MS TypeScript结合使用,它可以管理和构建一些非常令人印象深刻的项目,这些项目对于那些对VS中的项目更为满意的人来说非常有用.

看看AJS还有很多其他原因,但是如果你正在考虑像KnockOut这样的框架,我会强烈推荐使用AJS,而不管它是否存在学习曲线.Knockout是一个库,AJS是一个框架.


小智 8

到目前为止,我认为谷歌的Angular很棒.特别喜欢数据绑定和依赖注入.

对于其他js框架,有knockout.js,backbone.js等.这里有一些帖子: backbone.js和/或knockout.js中的angular.js示例


pos*_*est 7

我意识到这篇文章已经过时了,你还没有和Angular一起去过,但我有类似的背景,而且在问这个问题的时候我和你一样.

因此,为了未来访客的利益,我发现一些"风险"和资源链接有用......

  • 正如许多人已经提到的那样,Angular可以有一个非常陡峭的学习曲线"不仅是我,而且我认为非常聪明的开发人员的同事,已经与一些基本概念挣扎" AngularJS是惊人的...而且很难得到地狱(链接还有一些你要求的好的教程链接,并且版本2的东西看起来更像java,这对你的C#背景来说不会有问题,在我看来,如果没有详细的注释,指令很难理解等等.
  • 在某些情况下,角度性能可能较差,尤其是在大量元素上使用ng-repeat时考虑AngularJS中的速度和缓慢以及Scaylr的经验.其他人已经提到性能确实会降低超过〜2000个绑定元素,但这通常会遇到关于任何具有多个元素的应用程序可能不是一个好应用程序的争论.如果您有合法的用例需要许多绑定对象,请记住这一点.
  • Angular 在贡献者方面很受欢迎,但在生产使用方面比jQuery排名靠后.寻找Angular开发人员可能很难,jQuery或其他开发人员转换具有"陡峭的学习曲线"来处理.
  • 因为Angular很年轻,所以你不能保证它会为你的新Angular技能获得足够的牵引力,而你的新应用程序不会很快变成遗留代码
  • 在v1.2中,Angular不支持IE7及以下版本,v1.3将支持IE8.对于> = IE9,您需要遵循一些特殊的编码实践.
  • 您可能习惯使用的许多javascript小部件,插件和库无法在没有大量修改的情况下与Angular一起使用,人们通常建议在Angular中重新编写组件.
  • 更新2014年3月:经过2个月的尝试构建一个非平凡的功能强大的单页应用程序:Angular有很多版本,很难说哪个是最好的还是最稳定的.这取决于你用它编写的代码.我发现一些错误Angular通过升级到更高版本来修复,其他错误通过回归到更早版本来修复.我从来没有用jQuery去购物这样的版本.
  • 更新2014年5月:年轻,破碎的工具.巴塔朗是伟大的,直到它不起作用.在他们解决这个问题之前我不能相信它.

最后,我发现了学习这些东西的三个最好的资源