【发布时间】:2014-05-23 01:53:47
【问题描述】:
我通常了解到,只要以正确的顺序提供函数参数,函数实现可以有任何名称。这使得函数从外部抽象出来,本地名称对输出没有影响。实施者拥有局部变量的所有权利。然而,在 Angular JS 中,有这样的东西似乎违反直觉:
function Controller($scope)
{
$scope.name = "Something";
}
如果我把“bar”放在那里而不是“$scope”,我会得到一个错误。这不是我们习惯的正常功能。我相信这与 DI 有关,但任何人都可以解释这个概念吗?我发现很难将其称为“函数”,因为它依赖于外部世界——尤其是参数名称。
如果 DI 是真正的原因,谁能告诉我它是如何被调用的?通常,当我想为测试用例模拟一个对象时,我会认为 DI 做得很好。在这种情况下,DI 扮演什么角色?
在我遇到的 DI 的正常场景中,传递的参数会为诸如 foo displayTime(clock) { clock.something } 之类的函数提供服务。时间只是功能的服务。但是在这里我发现,$scope 和框架似乎用函数只是表达逻辑的声明方式发挥了魔力。
编辑:显然 JS minify 破坏了这个功能,我们需要像 How do the function argument names in Angular.js objects connect to other objects? 那样做
【问题讨论】:
-
Angular 实际上会评估参数(使用 Function.toString )名称并注入正确的资源,这是您在开始使用 angular 时学到的令人费解的事情之一!看这里:stackoverflow.com/questions/16949889/…
-
“在我遇到的 DI 的正常情况下,传递的参数为函数提供服务”......在 Angular 中也是如此,但是范围有点特殊...... .github.com/angular/angular.js/wiki/Understanding-Scopes 详细介绍了范围,docs.angularjs.org/guide/scope 可能更多地关注您应该如何使用它们但是您也可以注入自己的时钟服务,定义为:myApp.service('clock', ['otherDependency' , function(od) { this.something = "Im a clock!"; }]);
标签: javascript angularjs function