2011-10-04 32 views
64

我被要求为我们的一个客户构建一个小型Web应用程序,并认为这可能是尝试构建Web应用程序的不同框架的好机会。我们构建的大多数应用程序都基于asp.net web表单,并且我们还没有在MVC体系结构中做过任何事情,但我迫切希望通过正确的工具以更加结构化的方式开发Web应用程序。Google AngularJS框架 - 值得冒险吗?

我一直在研究像asp.net MVC和喜欢看起来相当不错的东西,但我想知道是否有什么要说的使用像谷歌AngularJS框架的东西。

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

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

+0

与其声明式绑定看起来类似于[Knockout.js](http://knockoutjs.com/)。 – greenimpala

+4

使用AngularJS和ASP.NET MVC 4构建单页Web应用程序:http://tarkus.me/post/32121691785/angularjs-with-asp-net-mvc-4 –

+2

您可能还需要检查AngularJS入门套件Visual Studio:http://github.com/kriasoft/angular-vs –

回答

103

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

的好东西:

  • 很大的可测性
  • 双向数据绑定是一个非常强大的功能,它可以是非常有用的,一旦你“得到它”
  • IMO的AngularJS模板比使用数据属性或“特殊”CSS类来标记要执行某些操作的元素要脆弱得多
  • 它大大降低了使用jquery插件的必要性,因为在AngularJS中实现该功能非常简单(像树,选项卡,手风琴等)

坏的东西:

  • 的学习曲线似乎很陡(我没有太大的问题,但我见过一些人与它的斗争)在AngularJS
  • 验证暂时吸收(新的实施方式)
  • 并非所有库/ jquery插件都可以很好地与Angular一起玩,并且通常你必须包装它们
  • API仍在被抛光,所以期望突破性变化一个大问题虽然有频繁的版本和很好的更新日志,但)
  • 性能是确定的,直到页面上的数千个绑定 - 大部分时间这不是一个限制,但有些情况下,这可能是一个问题。

一些指针(如果你决定开始学习AngularJS):

  • 有些人确实过度使用的小部件。根据我的经验,使用HTML“partials”+服务要好得多,而且只能零星地使用小部件。
  • 读库的源代码 - 这是学习的东西有关的角度
  • 服务/控制器没有DOM操作
  • 如果使用CSS类绑定到事件,你这样做是错误的最好的地方
+4

当你说“陡峭”(迅速增加)参照“学习曲线”时,你是否意味着“平缓”(缓慢增加)? –

+12

Angular是一个相当大的框架,开始时需要学习很多东西(包括像依赖注入这样的概念),所以我认为适当的单词是“陡峭的”。 – psyho

+0

谢谢,尤其是“一些指针”部分,它会帮助很多。我将在纯业务线应用程序上进行大量的输入控件验证。祝我好运。 –

26

+1 @ psycho的回答

AngularJS是客户端框架,因此您可以在服务器上使用任何语言。它的设计以及连同jQuery的工作,与大重点测试...

这里有一些资源可能对您有用:

一些示例应用程序:

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

适配器JQ手机:https://github.com/tigbro/jquery-mobile-angular-adapter

随意问任何问题上mailing list

我们仍处于测试阶段,但已经在谷歌几个内部应用,搭载AngularJS


更新(2012年7月26日):

AngularJS 1.0已经发布。

对于一些公共AngularJS供电的应用,看看http://builtwith.angularjs.org

+0

什么是这些应用程序Vojta?如果我们能指出谷歌吃自己的狗粮,这将使它更容易卖。 –

+0

@StevenP Google的大部分应用都是不幸的仅限于内部。但是,我通过链接更新了答案,您可以在其中看到一些公开应用。最大的AngularJS驱动的公共应用程序是DFA。 – Vojta

+0

使用v1构建示例应用程序在哪里?这将是一个有用的名单。 – noogrub

20

恕我直言开发的东西,他们可能很难支持一个客户是不专业的。你必须记住,这将是困难的客户聘请经验丰富的专业角度,还是培养自己的人爬上“陡峭的学习曲线”。此外,到目前为止,文件是不是很大。您能否轻松地在一段时间内回答这个问题:“我如何将闪亮的Angular应用程序连接到我的客户端数据库?”您的客户可以在未来的某个时候轻松获取一些现有的代码,并将其适应未来的潜在需求?说实话。

将古老可靠的LAMP开发与Angular比较。对于一个“小型网络应用程序”,我真的相信专业人士应该给他的客户一些可维护和简单的东西。

这并不是说Angular不酷,性感等等。但是,除了最新的框架时尚之外,您还有客户的未来可维护性。轻轻一点会是我的建议。先用Angular建立你自己的网站,然后在你给予某些信任的客户端的神话般的新技能之前看看你的想法。

+2

采取了点。我没有最终使用angular来构建应用程序。 – TGuimond

+2

这很有趣。当jQuery刚刚出来时,我敢打赌你用同样的理由拒绝jQuery。 – maxisam

+9

@maxisam - 是的,我做到了。当jQuery代码成熟后,我开始将其推广给商业客户。我只是觉得早期的采用有危险,应该在为客户做出决策时负责任地考虑,就这些。我正在构建一个应用程序,作为生产代码的测试;如果它表现良好,我们觉得AngularJS代码库稳定可靠,那么我们将把它作为公司标准推广。这就是我想说的。 – noogrub

11

我记得几个月前在几个月前读过这个SO线程,脑子里有同样的问题,我们决定继续使用AngularJS,以及我们在这个项目上做出的最佳决定。

我们使用AngularJS + ASP.NET MVC4 REST WebAPI。你可能只需要在服务器端使用REST API层与业务逻辑层进行交互,而在服务器端不需要MVC(ASP.NET MVC/Spring/Structs会感觉像旧的记忆)。

你会发现角UI很好的附加(ESP NG-网)

我们的项目结束后不久,我们可以把我们的一些指令,我们对开源世界中写道。

+0

我知道自从你回答以来,这个问题已经很久了,但是......今天你有什么可以分享的吗? – superjos

+0

@SutikshanDubey如果我需要制作自定义控件 - 屏幕上的宽度,高度,x/y位置属性来自json格式的服务器,请帮助解答在单个页面应用程序中使用angularjs做什么? –

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类型功能。

有许多正在建造的AJS UI框架,但是,你可以用任何第三方控制的lib需要给一点努力。诀窍是确保当这些第三方控件发生变化时,确保使用其应用方法正确通知AJS。

如果您在VS 2012与MS打字稿结合AJS,它提供管理和建立一些令人印象深刻的项目,这将为那些谁是更舒适VS.内的项目工作能力出色

有一吨的其他原因看AJS,但如果你正在考虑的框架,如淘汰赛我会强烈建议AJS相反,不管它的感知学习曲线。 Knockout是一个库,AJS是一个框架。

+0

我完全同意 – Spock

+0

@ user1333524如果我需要制作自定义控件 - 屏幕上的宽度,高度,x/y位置来自json服务器的属性,请帮助解答在单个页面应用中使用angularjs做什么格式? –

0

我会对此表示肯定,并检查出John Papa's hottowel作为一种方式来实现它。

+0

请备份链接... –

+1

http://www.johnpapa.net/hottowel/ –

7

我知道这个职位是旧的和你还没有角走了,但我也有类似的背景,你,和我在同一个点,你要问这个问题的时候。

所以对于未来游客的利益,一些“风险”和资源链接我发现有用...

  • 正如许多人已经提到的,角度可以有一个非常陡峭的学习曲线“不仅我,而且我认为高度聪明的开发人员的同事们都在为一些基本概念而努力”AngularJS is amazing... and hard as hell(链接也有你需要的一些很好的教程链接),而版本2的东西是looking more like java,它不会你的C#背景一直没有问题,在我看来,指令很难理解,没有详细的注释等等。
  • 角度性能在某些情况下是穷人,对大量元素的Considering Speed and Slowness in AngularJSScaylr's experience采用NG-重复时尤其如此。其他人已经提到,性能确实会降低超过2000个限制元素,但通常会遇到关于具有多于这些元素的应用程序可能不是什么好应用程序的争论。记住,如果你有合法用例需要许多绑定对象。
  • 角是流行in terms of contributors,但排名的方式方法落后,比如说,jQuery的在production usage条款。寻找Angular开发人员可能会很艰难,而jQuery或其他开发人员的转换有着“陡峭的学习曲线”来处理。
  • 因为Angular年轻,你不能保证它会获得足够的吸引力,使你的新角度技能可以被使用,并且你的新应用程序不会很快成为遗留代码
  • 在v1.2中Angular不支持IE7及以下版本和v1.3 will drop IE8。对于> = IE9,您需要按照some special coding practices
  • 您可能习惯使用的许多JavaScript小部件,插件和库无法与Angular一起使用,无需进行大量修改,而且人们通常会建议使用re-write your component in Angular anyway
  • 更新2014年3月:尝试构建一个非平凡的密集功能单页应用程序2个月后:Angular有很多版本,很难说哪个是最好的或最稳定的。这将取决于你使用它编码的内容。我找到了一些Bug,通过升级到更高版本修复了一些Bug,并通过回退到更早的版本修复了其他一些Bug。我从来没有购买像jQuery这样的版本购物。
  • 更新2014年5月:年轻,破碎的工具。 Batarang很棒,直到它doesn't work。我不能相信它,直到他们解决这个问题。

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