Angular.js和ASP.NET MVC 4

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

这是一些背景:

  • 我们需要双向模型数据绑定
  • 我们需要testing视图的能力。 我希望能够做端到端的unit testing。 另外,我们正在使用持续集成。
  • “保存更改”function。 即如果用户在页面上进行更改,我们需要能够检测到任何更改,并提示用户在离开页面之前保存更改
  • “通知”function。 即用户将在大约8小时内login,并需要得到通知并更新其他用户所做的更改(错误,数据状态更改等)
  • 我们需要“未来certificate”我们的申请。 目前业务部门还没有决定是否需要支持移动设备,但我知道这只是时间问题。
  • 我们的团队由非常初级到高级开发人员的开发人员组成。
  • 目前我们的模型很复杂,可能会变得更加复杂
  • 我们还需要考虑RAD,代码重用和可维护性

我已经阅读了这里的优秀答案,并观看了Scott Allen对Angular的采访

由于我们无法从当前的ASP.NET MVC 4体系结构更改为像Web API那样在服务器端使用某些东西,所以在尝试使用MVC 4实现Angular.js时有一些担忧 。这会导致我们有两种模式服务器和客户端上的一个?

我不是在寻找一个关于Angular和Knockout的“哪个更好”的讨论,因为我认为他们都有自己的优点和缺点。 我正在寻找在ASP.NET MVC 4应用程序中实现JavaScript框架或库的实际代码。 我需要一个解决scheme,我可以从现在开始使用2+年

任何想法或build议? 也许答案不是Knock或Angular,而是其他一些JavaScript框架?

我的2美分价值。

序言 – 我曾与angular和淘汰赛。 我在我的第三个不重要的前端使用MVVM / MVC库构build。

我从淘汰赛开始,因为它的MVVM与wpf / silverlight机制非常相似。 它运作良好。 教程和文档是一stream的。 所有的编程人员都可以在几天之内使用knockout.js,或者在.net下使用mvvm,然后在几个小时内使用。

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

  • angular是一个完整的框架 – 淘汰赛真的只是2方式约束力。 你仍然需要像backbone.js / jquery这样的其他库来完成剩下的工作。

  • angulardependency injection。 这是完美的添加
    嘲笑testing以及给你的代码结构。

  • angular度将正常的JSvariables视为其$ scope对象内的可观察对象。 这意味着你不必以特殊的方式申报

我不是一个有风格的fanboy,我仍然认为他们可以更多地转移到MVVM架构,而不是他们目前拥有的“时髦”的MVVM / MVC混合架构。

与angular度最大的问题是文档。 与淘汰赛相比,这是可悲的。 这将增加额外的时间和成本,让您的编码器加快速度。 一旦他们在那里,但它是目前最好的select恕我直言。

很高兴看到这个问题是社区的兴趣;)为了完整性,这是我最终做的:

我确实与AngularJS和ASP.NET MVC 4一起去,很高兴我做到了。 虽然Angular的学习曲线陡峭,但由于指令的力量,它的价值也是值得的。

  • 我们需要双向模型数据绑定 – 有时我需要设置来自MVC控制器的一些初始值。 我用ng-init属性来完成这个。
  • 我们需要testing视图的能力 – 我遵循AngularJS文档进行testing
  • “保存更改”function – 我在Angular中使用指令实现了这一点
  • “通知”function – 我使用toastr.js和和指令(schweet)
  • 我们需要“未来certificate”我们的应用程序 – 我不知道谷歌的AngularJS的计划,但与AngularJS工作后,我不能很快看到它的任何地方,预计它会变得更广泛的采用:)

我在AngularJs上没有太多的投入,但是想要提供关于Knockout的一些想法。

Knockout主要是一个数据绑定库来连接视图来查看模型,但是除此之外并没有提供很多function。 我不会推荐单独使用knockout作为主要的库build立一个复杂的基于客户端的网站。

你没有提到你是否实现类似spa的function(即散列标记导航),或者你是否主要使用MVC服务器端视图(例如Razor)。 如果您只是在每个页面上寻找快速的数据绑定,我甚至会重新考虑这一点。 对我来说,这些(angular度或挖空)都是为了增强客户端的开发体验 – 而不是像MVC这样的服务器端方法。

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

至于数据绑定的能力和可靠性,我相信Knockout。 我一直在广泛地使用它,并且相当喜欢它。 如果你喜欢淘汰赛的感觉,你可能想看看杜兰达 。 Durandal是一个体面的框架,能够满足许多“spa”web项目的需求。 这是一个build立在几个经过validation的库之上的客户端框架,包括Knockout。 比Angular稍微轻一些,对用户来说可能更容易一些。

我们正在build立一个相当大的ASP.Net MVC网站,使用Durandal和Knockout结合一个额外的外观从开发的angular度来收紧,而与ASP.Net MVC的集成是直接的。 我不build议尝试使用服务器端淘汰赛的东西, 我只是发现,以限制MVVM模式的实际权力。