【发布时间】:2014-04-11 08:28:17
【问题描述】:
我遇到了一个我认为很常见的场景,在这个场景中,我在前端使用 AngularJS 的 Web 应用程序使用 MVC 模式(特别是 ASP.NET 的 MVC 框架)。我的问题是我有一个特定的值,它是传递给我的视图的模型的一部分,我也想在我的 Angular 控制器的 $scope 上使用它,最好是在控制器初始化后立即使用。
如何做到这一点是一个已经被问及并回答过的问题。有一个明显的候选者:ngInit。然而,在某些时候,Angular 更新了their documentation,似乎是对这种特定想法的警告:
ngInit的唯一适当用途是为ngRepeat的特殊属性设置别名,如下面的演示所示。除了这种情况,您应该使用控制器而不是ngInit来初始化作用域上的值。
建议的替代方案不是很相关。
当然,我还可以想到其他解决方法。例如,视图可以将值插入到隐藏输入的ngModel 指令中。或者我可以直接忽略警告并使用ngInit。但我能想到的任何东西要么是与 ngInit 做同样事情的更丑陋的方式,要么显然更糟。
归根结底,对我来说似乎显而易见的解决方案显然是错误的,这可能表明我的思维方式与 Angular 的应有方式不一致。所以我的问题不是“我该如何处理这种情况”,而是:
- 我应该如何处理或避免这种情况?
- 为什么我不应该使用
ngInit?
澄清一下,因为从前两个 cmets 开始,这并不清楚:这是针对部分或大部分页面直接作为 MVC 视图提供服务的情况,Angular 仅提供某些特定功能.我想传递给 Angular 控制器的数据已经传递给模型中的视图。我不希望 Angular 控制器然后必须向服务器发出自己的 get 请求,只是为了以不同的格式获取视图已经可用的相同参数。
【问题讨论】:
-
通常,您使用网络服务调用来获取值,然后将其分配给
$scope中的变量 -
如果我理解正确,您在服务器上创建了一个值,您试图将其嵌入到您的 javascript 中,以便当您的角度服务从服务器请求数据时,它包含此变量。那是对的吗?就像将 userId 传回服务器一样?
-
@pedalpete 这个想法是在 MVC 视图中直接需要来自服务器的值。这假设我不希望 Angular 必须执行自己的获取请求。这更多地适用于 Angular 仅用于(例如,我的页面的特定部分)而不是 SPA 样式的情况,在这种情况下,我假设页面上的所有重要内容都将通过我的 Angular 控制器。我将更新问题以使其更清楚
-
服务器端渲染一个 AngularJS 服务来暴露值,然后将该服务注入到你的控制器中。
-
@JoelSkrepnek 这是一个有趣的答案!您是否有任何文章或文档的链接支持这一良好做法?
标签: javascript angularjs asp.net-mvc angularjs-controller ng-init