Angular.js 和 ASP.NET MVC 4

我有一个 ASP.NET MVC4项目,我被一个关于哪个 JavaScript 框架或库应该使用 Angular.js 或 Knock.js 的架构决定所困扰。我现在倾向于使用 Angular.js 而不是 Knockout.js,但是我不想在项目开发的中途发现我犯了一个错误。

以下是一些背景资料:

  • 我们需要双向模型数据绑定
  • 我们需要测试视图的能力。我希望能够做端到端的单元测试。另外,我们使用的是持续集成。
  • “保存更改”功能。也就是说,如果用户对页面进行了更改,我们需要能够检测到任何更改,并在用户离开页面之前提示用户保存更改
  • “通知”功能。即用户将登录约8小时,将需要通知和更新其他用户所做的更改(错误,数据状态更改等)
  • 我们需要“未来的证明”我们的应用程序。目前业务部门还没有决定我们是否需要支持移动设备,但我知道这只是时间问题。
  • 我们的团队由具有不同经验水平的开发人员组成,从初级开发人员到高级开发人员。
  • 目前我们的模型是复杂的,而且可能变得更加复杂
  • 我们还需要考虑 RAD、代码重用和可维护性

我已经阅读了优秀的答案 给你和观看斯科特艾伦关于角 给你的采访

因为我们无法从我们目前的 ASP.NET MVC 4架构改变到在服务器端使用像 Web API 这样的东西,我有一些 担忧来尝试用 MVC 4实现 Angular.js。这是否会导致我们在服务器上和客户机上分别有两种型号?

我不是在寻找一个“哪个更好”的角度和击倒讨论,因为我认为他们都有自己的优点和缺点。我正在寻找在 ASP.NET MVC 4应用程序中实现 JavaScript 框架或库的实际代码。我需要一个解决方案,我可以生活在2 + 年从现在:)

有什么想法或建议吗? 也许答案不是敲或角,而是其他一些 JavaScript 框架?

42944 次浏览

我的两分钱。

前言-我曾与角度和击倒。 我正在使用 MVVM/MVC 库构建第三个非平凡的前端。

我从淘汰开始,因为它的 MVVM 非常类似于 wpf/silver light 机制。而且效果很好。教程和文档都是一流的。您的所有程序员将能够在几天内使用淘汰.js,或者如果他们已经使用 mvvm。网,然后在几个小时内。

然而,这些天我使用的角度,并可能会坚持下来的原因。

  • 角度是一个完整的框架-击倒实际上只是2 你仍然需要像 backbone.js/jquery 这样的库 做你剩下的工作

  • 棱角有依赖注入,非常适合添加
    为测试进行模拟,并为代码提供结构

  • Angle 将正常的 JS 变量视为其 $scope 内的可观察变量 这意味着您不必以特殊的方式声明它们

我不是一个棱角分明的粉丝,我仍然认为他们可以更多地转移到 MVVM 架构,而不是“时髦”的 MVVM/MVC 混合架构,他们目前有。

角度最大的问题是文档。与击倒相比,这是可悲的。这将增加额外的时间和成本,让您的编码器的速度。然而,一旦他们在那里,恕我直言,这是目前最好的选择。

我对 AngularJs 没有太多的想法,但是我想提供一些关于 Knokout 的想法。

Knokout 主要是一个数据绑定库,用于将视图连接到视图模型,但除此之外并没有提供太多功能。我不建议使用淘汰单独作为主库来建立一个复杂的基于客户端的网站。

您没有提到是否实现了类似 spa 的功能(即散列标记导航)或者是否主要使用 MVC 服务器端视图(如 Razor)。如果您只是在寻找每页级别的快速数据绑定,我甚至会重新考虑这一点。对我来说,这两者(角度或击败)都是为了增强客户端开发体验而设计的——而不是像 MVC 那样的服务器端方法。

如果您正在考虑一种 SPA 方法,甚至是部分地考虑,那么您可能需要一些框架来提供对视图激活生命周期的某种程度的控制。

至于数据绑定的能力和可靠性,我相信 Knockout。我一直在广泛地使用它,并且越来越喜欢它。如果你喜欢击倒的感觉,你可能想看看 Durandal。Durandal 是一个不错的框架,能够满足许多“ spa”网络项目的需求。它是一个客户端框架,建立在几个经过验证的库之上,包括 Knokout。这是一个有点(很多)更轻的重量比角度,可能更容易使用。

我们正在建立一个相当大的 ASP.net MVC 网站,使用 Durandal 和 Knokout,再加上一个外观,从开发的角度来加强这些功能,并且与 ASP.net MVC 的集成是直接的。我不推荐尝试使用服务器端淘汰的东西,我只是发现这限制了 MVVM 模式的真正威力。

很高兴看到这些问题引起了社区的兴趣;)为了完整起见,我最后这样做了:

我确实使用了 AngularJS 和 ASP.NET MVC 4,并且很高兴我这样做了。虽然,Angular 有一个陡峭的学习曲线,但它的价值,因为指令的力量。

  • 我们需要双向模型数据绑定-有时我需要设置一些来自 MVC 控制器的初始值。我使用 ng-init 属性来实现这一点。
  • 我们需要测试视图的能力-我遵循 AngularJS 医生进行测试
  • “保存更改”功能-我实现了这个使用角度指令
  • “通知”功能——我使用 toastr.js 和指令(schweet)实现了这个功能
  • 我们需要“未来的证明”我们的应用程序-我不知道谷歌的 AngularJS 的计划,但与 AngularJS 合作后,我不能看到它去任何地方很快,并预计它将成为更广泛的采用:)