Javascript $inject在后台的工作情况如何
我知道如何在我的项目中使用$injectJavascript $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=[]; /
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知道何时执行控制器的功能,并知道如何调用它:
$injector
属性中查找,并使用$injector
服务按精确顺序获取所有实例,并将它们放入数组argsArray
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知道何时执行控制器的功能,并知道如何调用它:
$injector
属性中查找,并使用$injector
服务按精确顺序获取所有实例,并将它们放入数组argsArray
YourControllerFunction.apply(null,argsArray)
执行控制器的代码这是你要找的信息吗?hi@Alberto我问的是背景(角度代码)中的情况如何,但不是如何让注射器脱离角度。总之,我在这里学到了一个新东西hi,@bharathmuppa我更新了答案,希望能解决你的疑问。Shi@Alberto我问的是背景(角度代码)中的情况如何但我不知道怎样才能让注射器有角度。不管怎样,我在这里学到了一个新东西嗨,@bharathmuppa我更新了答案,希望能解决你的疑问