Angularjs 在DI集合之后,匿名函数中的局部变量是怎样的?
我已经尽可能多地阅读了教程和Angular文档,但对于幕后发生的事情,我仍然有一些问题。我想我的主要问题是关于依赖注入。。。在数组的第一个参数中声明它们时,是否调用了服务?这些值是如何传递给匿名函数的 例如: 这就是我的价值观:Angularjs 在DI集合之后,匿名函数中的局部变量是怎样的?,angularjs,Angularjs,我已经尽可能多地阅读了教程和Angular文档,但对于幕后发生的事情,我仍然有一些问题。我想我的主要问题是关于依赖注入。。。在数组的第一个参数中声明它们时,是否调用了服务?这些值是如何传递给匿名函数的 例如: 这就是我的价值观: angular.module("root", []) .value("message", "Hello world!"); 这是我的控制器: angular.module("root&quo
angular.module("root", [])
.value("message", "Hello world!");
这是我的控制器:
angular.module("root", [])
.controller("index", ["$scope", "message", function($scope, message) {
// Do something with message and/or $scope.
}]);
所以我的问题是:
function($scope, message) {...
这是另一个例子。
因此,该工厂取决于因子值:
angular.module("services", [])
.value("factor", 6)
.factory("square", ["factor", function (factor) {
return factor * factor;
}]);
此控制器依赖于$scope和square服务:
angular.module("root", ["services"])
.controller("index", ["$scope", "square",
function ($scope, square) {
$scope.product = square;
}
]);
但是匿名函数集中的局部变量是如何设置的?
function($scope, message) {...
问题:
注意:我已经读过了:
回答您的问题:'但是匿名函数集中的局部变量是如何设置的?':它们不是,而是作为参数提供的。它们被“注入”到函数中 看看这个例子:
inject = function(first, second, target) {
return target(first, second);
}
greeter = function(name, age) {
var name = name;
var age = age;
return {
sayHi : function() {
console.log('Hi there ' + name + ' you are ' + age);
}
}
}
var johngreeter = inject('john',22,greeter);
johngreeter.sayHi(); // Hi there john you are 22
var janegreeter = inject('jane',30,greeter);
janegreeter.sayHi(); // Hi there jane you are 30
你可以在这里玩:
我希望你能看到你的角度代码的相似之处。.controller
函数有一个名称(第一个参数),然后是一个参数数组,然后是实际的控制器函数(第二个参数)
“$scope”,“square”
将被注入该数组第三部分中函数的$scope,square
参数中。因此,我怀疑您所谓的“局部变量”$scope是由注入器设置为函数参数的
角度注入器显然要复杂得多,它将尝试通过名称或其他约定来解析
$scope
和square
,但我希望您明白这一点:它注入函数的参数(因此是一个好名称)。这都在函数的官方文档中进行了解释。依赖项注入不是JavaScript回调。在阅读了文档之后,你能把这个问题缩小到一个问题吗?我投票结束这个问题,因为阅读手册很容易回答问题。我读了手册,还是不明白。你能提供一个答案吗?你写道:“$scope”,“square”将被注入该数组第三部分中函数的$scope,square参数中。因此,我怀疑你所谓的‘局部变量’$scope是由注入器设置为函数参数的。”所以变量由注入器设置,然后用作参数来调用匿名函数?是吗?真的!我想你明白了-注意,角度注入器更智能,它可能有一个内部字典,也能够做更智能的事情-比如为特定的控制器生成一个$scope
。明白了,控制器的scope可能在幕后有一些新的rootscope。因此,一些获取和设置确实是在幕后进行的。现在我可以看出我写的是错误的:“‘但是匿名函数集中的局部变量是怎样的?’:它们不是,它们是作为参数提供的。”。它们被称为参数,而不是set。等等,所有控制器共享一个根作用域,但有自己的作用域。控制器可以嵌套,因此作用域可以嵌套。但它们都共享相同的根范围。这允许不嵌套的控制器进行通信。