Angular.js和ASP.NET MVC 4

Que*_*Que 73 javascript javascript-framework asp.net-mvc-4 angularjs knockout.js

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

这是一些背景:

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

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

由于我们无法从当前的ASP.NET MVC 4体系结构更改为在Web服务器端使用某些内容,因此我尝试使用MVC 4实现Angular.js时会遇到一些问题.这会导致我们有两个模型服务器和客户端上的服务器?

我不是在寻找关于Angular和Knockout的"哪个更好"的讨论,因为我认为它们都有它们的优点和缺点.我正在寻找在ASP.NET MVC 4应用程序中实现JavaScript框架或库的实际代码.我需要一个解决方案,我可以用2年多的时间来生活:)

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

Ant*_*ton 57

我的2美分价值.

序言 - 我曾经使用角度和淘汰赛.我正在使用MVVM/MVC lib构建我的第3个非常简单的前端.

我开始使用淘汰赛,因为它的MVVM非常类似于wpf/silverlight机制.它运作良好.教程和文档是一流的.您的所有程序员都可以在几天内使用knockout.js,或者如果他们在.net下使用mvvm,那么几小时内就可以使用.

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

  • angular是一个完整的框架 - 淘汰赛实际上只是2路绑定.你还需要像backbone.js/jquery这样的其他库来完成你的其余工作.

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

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

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

角度最大的问题是文档.与淘汰赛相比,这是可悲的.它会增加额外的时间和成本,让你的编码人员加快速度.然而,一旦他们在那里,它是目前最好的选择恕我直言.


Que*_*Que 21

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

我确实选择了AngularJS和ASP.NET MVC 4,很高兴我这样做了.虽然,Angular有一个陡峭的学习曲线,但由于指令的力量,它值得.

  • 我们需要双向模型数据绑定 - 在场合我需要设置一些来自MVC控制器的初始值.我使用ng-init属性来完成此任务.
  • 我们需要能够测试视图 - 我按照AngularJS文档进行测试
  • "保存更改"功能 - 我使用Angular中的指令实现了这一功能
  • "通知"功能 - 我使用toastr.js和指令(schweet)实现了这一点
  • 我们需要"未来证明"我们的应用程序 - 我不知道Google对AngularJS的计划,但在与AngularJS合作之后我很快就看不到它会在任何时候发生,并期望它会被广泛采用:)

  • 仅仅2美分:AngularJS是开源的,所以谷歌的计划无关紧要.这完全取决于社区现在想要的东西:) (2认同)

Jos*_*iel 12

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

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

您没有提到您是否正在实现类似spa的功能(即散列标签导航),或者您是否主要使用MVC服务器端视图(例如Razor).如果您只是在每页上寻找快速数据绑定,我甚至会重新考虑这一点.对我来说,这两者(角度或淘汰赛)旨在增强客户端开发体验 - 而不是像MVC那样的服务器端方法.

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

至于数据绑定能力和可靠性,我相信Knockout.我一直在广泛使用它,并且已经非常喜欢它.如果你喜欢淘汰赛的感觉,你可能想看看Durandal.Durandal是一个体面的框架,能够满足许多"spa"Web项目的需求.它是一个基于几个经过验证的库构建的客户端框架,包括Knockout.它比Angular的重量轻很多(很多),并且可能更容易使用.

我们正在构建一个相当大的ASP.Net MVC网站,使用带有Knockout的Durandal和一个额外的外观,从开发的角度来收紧事情,并且与ASP.Net MVC的集成是直截了当的.我不建议尝试使用那里的服务器端淘汰内容; 我只是发现要限制MVVM模式的实际功能.

  • SPA - 单页应用程序 (2认同)