Javascript $inject在后台的工作情况如何

Javascript $inject在后台的工作情况如何,javascript,angularjs,Javascript,Angularjs,我知道如何在我的项目中使用$inject angular.module("myApp",["ngRouter"]); angualr.module("myApp").controller("myCtrl",myCtrl); myCtrl.$inject=["$scope"]; function myCtrl(sc){ sc.a=10; sc.b=20; } 我的问题是myCtrl如何能够将$inject作为属性并获取可注入的数组 Function.prototype.$inject=[]; /

我知道如何在我的项目中使用$inject

angular.module("myApp",["ngRouter"]);
angualr.module("myApp").controller("myCtrl",myCtrl);
myCtrl.$inject=["$scope"];
function myCtrl(sc){
sc.a=10;
sc.b=20;
}
我的问题是myCtrl如何能够将$inject作为属性并获取可注入的数组

Function.prototype.$inject=[]; //assigning $inject to Function prototypes
//then we can use
function a(){
this.a=10;this.b=20}
a.$inject=[1,2,3]
如果我在这之前是正确的,那么请解释下一步可能是什么?
如果我错了,请纠正我

如果要将$injector暴露在angular之外(但在执行angular的引导之后),可以执行以下操作:

angular.module("myApp").run(['$injector', function($injector){
    angular.$$injector = $injector;
}]);
请记住,这是一种黑客行为,如果您想使用angular,您应该以angular的方式编写代码。

用法示例:

function myButtonPressed(){
    // make an $http call
    var $http = angular.$$injector.get('$http');
    $http.get(/*......*/);
}
更新: 如果你想知道angular是如何工作的,我可以尽量简单地解释这个概念

Angular有某种“单例存储库”(在某些情况下取决于执行上下文,如
$scope
),其中所有对象都必须以各种方式注册

现在,当您使用
module.controller(此处为函数或数组)
在Angular中定义控制器(即函数)时,它存储您的函数,并使用和数组“singleton的标识符”分配
$inject
属性(如您在示例中所做的)

Angular知道何时执行控制器的功能,并知道如何调用它:

  • Angular在
    $injector
    属性中查找,并使用
    $injector
    服务按精确顺序获取所有实例,并将它们放入数组
    argsArray
  • Angular使用
    YourControllerFunction.apply(null,argsArray)
    执行控制器的代码

  • 这是您要查找的信息吗?

    如果您想将$injector暴露在angular之外(但在执行angular的引导之后),您可以执行以下操作:

    angular.module("myApp").run(['$injector', function($injector){
        angular.$$injector = $injector;
    }]);
    
    请记住,这是一种黑客行为,如果您想使用angular,您应该以angular的方式编写代码。

    用法示例:

    function myButtonPressed(){
        // make an $http call
        var $http = angular.$$injector.get('$http');
        $http.get(/*......*/);
    }
    
    更新: 如果你想知道angular是如何工作的,我可以尽量简单地解释这个概念

    Angular有某种“单例存储库”(在某些情况下取决于执行上下文,如
    $scope
    ),其中所有对象都必须以各种方式注册

    现在,当您使用
    module.controller(此处为函数或数组)
    在Angular中定义控制器(即函数)时,它存储您的函数,并使用和数组“singleton的标识符”分配
    $inject
    属性(如您在示例中所做的)

    Angular知道何时执行控制器的功能,并知道如何调用它:

  • Angular在
    $injector
    属性中查找,并使用
    $injector
    服务按精确顺序获取所有实例,并将它们放入数组
    argsArray
  • Angular使用
    YourControllerFunction.apply(null,argsArray)
    执行控制器的代码

  • 这是你要找的信息吗?

    hi@Alberto我问的是背景(角度代码)中的情况如何,但不是如何让注射器脱离角度。总之,我在这里学到了一个新东西hi,@bharathmuppa我更新了答案,希望能解决你的疑问。Shi@Alberto我问的是背景(角度代码)中的情况如何但我不知道怎样才能让注射器有角度。不管怎样,我在这里学到了一个新东西嗨,@bharathmuppa我更新了答案,希望能解决你的疑问