Angular.js和ASP.NET MVC 4


73

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

这里是一些背景:

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

我已阅读优秀的答案在这里,看着斯科特·艾伦的采访时谈到角在这里

由于我们无法从当前的ASP.NET MVC 4体系结构更改为在服务器端使用Web API之类的功能,因此我在尝试使用MVC 4实现Angular.js时会有些顾虑。这是否会导致我们拥有两个模型服务器和客户端上的一个?

我并不是想对Angular和Knockout进行“更好的讨论”,因为我认为它们都有优点和缺点。我正在寻找有关在ASP.NET MVC 4应用程序中实现JavaScript框架或库的实际代码。我需要一个可以从现在开始2年以上才能使用的解决方案:)

有什么想法或建议吗?也许答案不是Knock或Angular,而是其他JavaScript框架?


1
我很好奇为什么在使用ASP.NET MVC时需要其中一个?为什么不只在Razor中使用ASP.NET的视图,并进行ajax调用和jquery来操纵DOM?
user441521

Answers:


57

我的2美分的价值。

序言-我曾经在角度和淘汰赛上工作过。我在用MVVM / MVC库构建的第三个非同寻常的前端上。

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

但是,这些天我使用的是angular,可能由于以下原因会坚持使用它。

  • angular是一个完整的框架-淘汰赛实际上只是2种方式的绑定。您仍然需要其他库(例如骨架.js / jquery)来完成其余工作。

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

  • angular将普通JS变量视为其$ scope对象中的可观察变量。这意味着您不必以特殊方式声明它们

我不是一个狂热的狂热者,我仍然认为他们可以将更多的精力转移到MVVM架构上,而不是目前拥有的“笨拙”的MVVM / MVC混合架构。

angular的最大问题是文档。相比淘汰赛,这是可怕的。这将增加额外的时间和成本,以使您的编码器快速入门。但是一旦到达那里,它便是当前恕我直言的最佳选择。


21

很高兴看到这个问题引起了社区的关注;)为了完整起见,我最终要做的是:

我确实使用了AngularJS和ASP.NET MVC 4,并为自己做到了而感到高兴。虽然,Angular具有陡峭的学习曲线,但是由于指令的力量,值得这样做。

  • 我们需要双向模型数据绑定-有时,我需要设置一些来自MVC控制器的初始值。我使用ng-init属性来完成此操作。
  • 我们需要测试视图的能力-我遵循AngularJS文档进行测试
  • “保存更改”功能-我在Angular中使用指令实现了此功能
  • “通知”功能-我使用toastr.js和和指令(schweet)实现了此功能
  • 我们需要对应用程序进行“前瞻性证明”-我不知道Google对AngularJS的计划,但是在与AngularJS合作之后,我看不到它会很快出现在任何地方,并期望它会被更广泛地采用:)

2
只是我的2美分:AngularJS是开源的,因此Google的计划并不重要。这就是社区现在想要的一切:)
DomenicDatti 2014年

12

我对AngularJ的投入不多,但是想对淘汰赛提出一些想法。

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

您没有提到您是在实现类似spa的功能(即哈希标签导航),还是主要使用MVC服务器端视图(例如Razor)。如果您只是想在每页级别上进行快速数据绑定,我什至会重新考虑。对我来说,这两种方法(角度或敲除)都是为了增强客户端开发体验而设计的-与其说是诸如MVC之类的服务器端方法,不如说是它的设计。

如果您正在考虑采用SPA方法(甚至是部分方法),则可能需要一些框架来对视图激活生命周期进行某种程度的控制。

就数据绑定功能和可靠性而言,我相信淘汰赛。我已经广泛使用它,并且对此非常喜欢。如果您喜欢淘汰赛的感觉,不妨考虑一下Durandal。Durandal是一个不错的框架,能够满足许多“ spa”网络项目的需求。这是一个基于一些成熟的库(包括Knockout)构建的客户端框架。它比Angular轻一点(很多),并且可能更容易使用。

我们正在使用Durandal和Knockout以及其他外观来构建一个相当大的ASP.Net MVC网站,以从开发的角度加强工作,并且与ASP.Net MVC的集成非常简单。我不建议您尝试使用服务器端的淘汰赛。我只是发现这限制了MVVM模式的真正功能。


2
SPA-

1
+1建议不要使用服务器端的淘汰赛东西knockoutmvc在那里。这是事实:stackoverflow.com/a/11618190/487940
harsimranb 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.