Asp.net mvc 4 Angular.js和ASP.NET MVC 4

Asp.net mvc 4 Angular.js和ASP.NET MVC 4,asp.net-mvc-4,angularjs,knockout.js,javascript,javascript-framework,Asp.net Mvc 4,Angularjs,Knockout.js,Javascript,Javascript Framework,我有一个ASP.NETMVC4项目,我在一个架构上决定使用Angular.js或Knock.js的JavaScript框架或库。我目前倾向于使用Angular.js而不是Knockout.js,但不想在项目开发过程中发现我犯了一个错误 以下是一些背景: 我们需要双向模型数据绑定 我们需要测试视图的能力。我希望能够进行端到端的单元测试。此外,我们正在使用持续集成 “保存更改”功能。i、 e.如果用户在页面上进行更改,我们需要能够检测任何更改,并在用户离开页面之前提示用户保存更改 “通知”功能。i

我有一个ASP.NETMVC4项目,我在一个架构上决定使用Angular.js或Knock.js的JavaScript框架或库。我目前倾向于使用Angular.js而不是Knockout.js,但不想在项目开发过程中发现我犯了一个错误

以下是一些背景:

  • 我们需要双向模型数据绑定
  • 我们需要测试视图的能力。我希望能够进行端到端的单元测试。此外,我们正在使用持续集成
  • “保存更改”功能。i、 e.如果用户在页面上进行更改,我们需要能够检测任何更改,并在用户离开页面之前提示用户保存更改
  • “通知”功能。i、 e.用户将登录大约8小时,并需要通知和更新其他用户所做的更改(错误、数据状态更改等)
  • 我们需要“证明未来”我们的应用程序。目前业务部门尚未决定是否需要支持移动设备,但我知道这只是时间问题
  • 我们的团队由具有不同经验水平的开发人员组成,从初级开发人员到高级开发人员
  • 目前我们的模型很复杂,可能会变得更复杂
  • 我们还需要考虑RAD、代码重用和可维护性。
我已经阅读了优秀的答案,并观看了斯科特·艾伦关于Angular的采访

由于我们无法从当前的ASP.NET MVC 4体系结构更改为在服务器端使用Web API之类的东西,因此我在尝试使用MVC 4实现Angular.js时有一些经验。这会导致我们有两个模型,一个在服务器上,一个在客户机上吗

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

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

我的2美分价值

序言-我曾与angular和knockout合作过。 我正在使用MVVM/MVC库构建第三个非平凡的前端

我从knockout开始,因为它的MVVM与wpf/silverlight机制非常相似。而且效果很好。教程和文档都是一流的。您的所有编码人员都将能够在几天内使用knockout.js,或者如果他们使用了.net下的mvvm,则可以在数小时内使用

然而,这些天我使用angular,可能会坚持使用它,原因如下

  • angular是一个完整的框架-淘汰赛实际上只是关于2 方式绑定。您仍然需要其他库,如backbone.js/jquery 做你剩下的工作

  • angular具有依赖注入。这非常适合添加
    模拟用于测试以及为代码提供结构

  • angular将普通JS变量视为$scope内的可观察变量 对象这意味着你不必以特殊的方式申报

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


angular的最大问题是文档。与淘汰赛相比,这是可悲的。这将增加额外的时间和成本,让您的编码器的速度。然而,一旦他们到了那里,这是目前IMHO的最佳选择。

我对AngularJs没有太多的意见,但想提供一些关于淘汰赛的想法

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

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

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

就数据绑定能力和可靠性而言,我相信淘汰制。我一直在广泛地使用它,并且变得非常喜欢它。如果你喜欢击倒的感觉,你可能想看看。Durandal是一个不错的框架,能够满足许多“spa”web项目的需要。它是一个客户端框架,构建在几个经过验证的库之上,包括Knockout。它的重量比角度要轻一点,而且可能更容易使用


我们正在构建一个相当大的ASP.NETMVC网站,使用Durandal和Knockout,并结合一个额外的facade,从开发的角度来看,它将更加紧密,与ASP.NETMVC的集成是直截了当的。我不建议尝试使用服务器端的淘汰功能;我只是发现限制MVVM模式的真正力量。

很高兴看到这个问题引起了社区的兴趣;)为了完整起见,我最后做了以下几点:

我确实选择了AngularJS和ASP.NETMVC4,并为此感到高兴。虽然Angular有一个陡峭的学习曲线,但由于指令的力量,它是值得的

  • 我们需要双向的模型数据绑定——有时候我需要设置一些来自MVC控制器的初始值。我使用了nginit属性来实现这一点
  • 我们需要测试视图的能力-我按照
  • “保存更改”功能-I im