65

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

我一直在研究诸如 asp.net MVC 之类的东西,它们看起来相当不错,但我想知道使用 Google AngularJS 框架之类的东西有什么要说的。

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

有没有人有过使用 AngularJS 开发应用程序的经验,如果有,感觉如何,您能否为我指出一些教程的正确方向?

4

8 回答 8

104

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

好东西:

  • 良好的可测试性
  • 双向数据绑定是一个非常强大的功能,一旦你“掌握”它就会非常有用
  • IMO AngularJS 模板比使用数据属性或“特殊”CSS 类来标记做某事的元素要脆弱得多
  • 它大大减少了使用 jquery 插件的需要,因为在 AngularJS 中实现该功能非常容易(树、选项卡、手风琴等)

坏事:

  • 学习曲线似乎很陡峭(我没有太大问题,但我看到有些人为此苦苦挣扎)
  • AngularJS 中的验证暂时很糟糕(一个新的实现正在进行中)
  • 并非所有库/jquery 插件都可以很好地与 Angular 配合使用,通常您必须将它们包装起来
  • API 仍在完善中,因此请期待重大更改(不过,频繁发布和非常好的更改日志并不是什么大问题)
  • 直到页面上有数千个绑定之前,性能都可以 - 大多数情况下这不是限制,但在某些情况下这可能是一个问题。

一些建议(如果你决定学习 AngularJS):

  • 有些人真的过度使用小部件。以我的经验,使用 HTML“部分”+ 服务要好得多,并且只偶尔使用小部件。
  • 阅读该库的源代码 - 这是学习 Angular 知识的最佳场所
  • 服务/控制器中没有 DOM 操作
  • 如果您使用 css 类绑定到事件,那么您做错了
于 2011-10-04T22:42:20.313 回答
26

+1 @psycho 的回答

AngularJS 是客户端框架,因此您可以在服务器上使用任何语言。它被设计为与 jQuery 一起工作,非常强调测试......

以下是一些您可能会觉得有用的资源:

一些示例应用程序:

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

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

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

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


更新(2012 年 7 月 26 日):

AngularJS v1.0 已经发布。

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

于 2011-10-10T01:28:30.760 回答
20

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

将普通的旧可靠 LAMP 开发与 Angular 进行比较。对于“小型 Web 应用程序”,我真的相信专业人士应该为他的客户提供可维护且简单的东西。

这并不是说 Angular 不酷不性感等等。但是除了最新的框架时尚之外,您还需要考虑客户未来的可维护性。我的建议是轻装上阵。首先使用 Angular 构建您自己的网站,看看您的想法,然后再将您出色的新技能传授给一些值得信赖的客户。

于 2012-06-30T05:50:52.457 回答
11

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

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

很可能在如此好的客户端 Javascript MVC 框架之后,您只需要 REST API 层与服务器端的业务逻辑层交互,而服务器端不需要 MVC(ASP.NET MVC/Spring/Structs 会感觉像是旧记忆)。

你会发现 Angular-UI 很好的附加组件(尤其是 ng-grid)

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

于 2013-01-21T11:45:38.433 回答
11

几个月来,我一直在研究 AngularJS 的优点,以便将其用作我正在创建的产品的核心框架。AJS 有很多方面值得学习。是的,有一点学习曲线,但它非常值得,特别是如果您希望对客户端功能有更多控制。

JQuery 在运行时操作 DOM,而 AJS 位于 JS 渲染生命周期中。这允许您通过创建 HTML 元素和属性来教授 DOM 新技巧。这是非常非常强大的。你所能做的就是为你的目的和需要引入新的元素行为。在 AJS 中,这些自定义 HTML 属性/元素称为指令。通过制作自己的指令的能力,您可以构建当前 HTML 所没有的功能,推出将在现在和将来在所有现代浏览器上运行的功能。在诱导新行为的众多方法中,AJS 似乎是人们可以采取的最安全的方向,因为他们选择了实现它的方式。

在 AJS 中比 JQuery 有巨大的性能提升。

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

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

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

有许多为 AJS 构建的 UI 框架,但您可以根据需要包装任何 3rd 方控件库,只要付出一点努力。诀窍是确保当这些 3rd 方控件发生更改时,确保使用它们的 apply 方法正确通知 AJS。

如果您在 VS 2012 中将 AJS 与 MS TypeScript 结合使用,它提供了管理和构建一些非常令人印象深刻的项目的能力,这对于那些更熟悉 VS 中的项目的人来说非常有用。

考虑 AJS 的原因还有很多,但是如果您正在考虑使用 KnockOut 等框架,我强烈推荐使用 AJS,不管它的学习曲线如何。Knockout 是一个库,AJS 是一个框架。

于 2013-02-10T16:25:25.773 回答
8

到目前为止,我认为 Google 的 Angular 很棒。特别像数据绑定和依赖注入。

对于其他 js 框架,有 knockout.js、backbone.js 等。这里有一些帖子

于 2012-04-25T06:42:07.750 回答
7

我意识到这篇文章已经过时了,你还没有使用 Angular,但我和你有相似的背景,而且在问这个问题时我和你的观点相同。

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

  • 正如许多人已经提到的那样,Angular 的学习曲线非常陡峭“不仅我,而且我认为非常聪明的开发人员的同事都在为一些基本概念而苦苦挣扎” AngularJS 太棒了......而且很难(链接也有一些你要求的很好的教程链接),第 2 版的东西看起来更像 java,这不会是你的 C# 背景的问题,在我看来,指令很难理解没有冗长的注释和很快。
  • 在某些情况下,Angular 性能可能很差,尤其是在考虑 AngularJSScaylr 的经验中的速度和缓慢性的大量元素上使用 ng-repeat 时。其他人提到,性能确实会降低超过 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 月更新:年轻、破损的工具。Batarang 很棒,直到它不起作用。在他们修好这个之前,我不能相信它。

最后,我找到的三个学习这些东西的最佳资源

于 2014-03-11T23:29:29.497 回答
0

我会对此表示同意,并查看John Papa 的 hottowel实现作为一种方法。

于 2013-12-27T04:38:08.773 回答