DI设置后,匿名函数中的局部变量如何?

时间:2015-07-25 15:20:40

标签: angularjs

我已经从教程和Angular文档中尽可能多地阅读,但我仍然有一些关于幕后发生的事情的问题。我认为我的主要问题是关于依赖注入...当你在数组的第一个参数中声明它们时,是否调用了服务?值是如何传递给匿名函数的?

例如:

这是我的价值:

angular.module("root", [])
    .value("message", "Hello world!");

这是我的控制者:

angular.module("root", [])
    .controller("index", ["$scope", "message", function($scope, message) {
        // Do something with message and/or $scope.
    }]);

所以我的问题是:

  1. 当我们在数组的第一个参数中的索引控制器中声明依赖注入时......发生了什么?我知道$ injector:
  2.   

    负责使用我们通过$ provide提供的代码实际创建我们服务的实例(没有双关语意)。每当你编写一个带有注入参数的函数时,你就会看到喷射器在工作。

         

    获得$ injector后,您可以通过使用服务名称调用get来获取已定义服务的实例。

    这是我很困惑的引用:

      

    注入器还负责将服务注入功能;例如,您可以使用注入器的调用方法将服务神奇地注入到您拥有的任何函数中;

    将服务注入函数意味着在幕后?当我们在数组中声明字符串并且返回值设置为匿名函数内局部变量的值时,是否调用了某个函数? 如何设置消息?

    function($scope, message) {...
    

    这是另一个例子。 所以这个工厂依赖于因子值:

    angular.module("services", [])
        .value("factor", 6)
        .factory("square", ["factor", function (factor) {
                return factor * factor;
        }]);
    

    此控制器依赖于$ scope和square services:

    angular.module("root", ["services"])
        .controller("index", ["$scope", "square",
            function ($scope, square) {
                $scope.product = square;
            }
        ]);
    

    但是如何设置匿名函数中的局部变量?

    问题:

    注意:我已经读过这个:

    dependency injection

1 个答案:

答案 0 :(得分:1)

回答你的问题:'但匿名函数中的局部变量是如何设置的?' :他们不是,他们作为参数提供。他们被注射了#39;进入功能。

看一下这个例子:

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

您可以在此处使用它:https://jsfiddle.net/gc5066x2/

我希望你能看到你的Angular代码的相似之处。 .controller函数有一个名称(第一个arg),然后是一个参数数组,然后是实际的控制器函数(第二个arg)。

"$scope", "square"将被注入该数组第3部分中函数的$scope, square参数。所以我怀疑你打电话给地方变量' $ scope,由进样器设置为函数参数。

Angular注入器显然要复杂得多,它会尝试通过名称或其他约定来解析$scopesquare,但我希望你明白这一点:注入(因此很好) name)函数的参数。

相关问题