我完全搞不懂Angular中的inject。我不知道在哪里使用它,为什么使用它。它是否仅作为described here?与工厂一起使用
myController.$inject = ['$scope','notify'];
这里的notify
是工厂的名称。
发布于 2013-09-09 21:33:01
这是在代码缩小化(如果您选择缩小化)后支持依赖注入的一种方法。
当您声明一个控制器时,该函数接受参数:
function ($scope, notify)
当你缩减代码时,你的函数将如下所示:
function (a, b)
因为AngularJS使用函数参数名来推断DI,所以您的代码将会崩溃,因为AngularJS不知道a
或b
。
为了解决这个问题,他们提供了额外的方法来声明控制器(或其他服务/工厂/等等):
对于控制器的
$inject
方法-在这里传递映射到控制器函数参数的文字数组。因此,如果您提供'$scope','notify‘
然后,函数的第一个参数的值将是与此控制器关联的作用域对象,第二个参数将是通知服务。
angular.module('myModule').controller('MyController','$scope','notify',function ($scope,notify) { ... });
作为控制器函数参数的数组将DI对象映射到您的函数参数。
当声明控制器等时,我更喜欢选项#2,因为它更容易阅读/理解/交叉检查,因为它们都在同一位置。
发布于 2015-04-23 12:15:56
为了补充@mark answer,重要的是要注意以以下形式使用$inject方法:
MyController.$inject = ['$scope', 'notify'];
允许您在构建提供程序时添加注入依赖,这是不允许允许“友好”注释样式的唯一角度配方,即:
.controller('MyController', ['$scope', 'notify',...
要声明的依赖项。
发布于 2016-11-17 17:48:22
您应该使用$inject
的方式是:
function ApplicationController($scope){
$scope.greet = "Foo is Not Great!5";
}
ApplicationController.$inject = ['$scope','$ionic'];
app.controller('ApplicationController', ApplicationController);
我们需要这样做,以保护代码免受丑化或最小化。
function(firstName,lastName)
可能会变成function(n,m)
。
所以对于AngularJS,它会破坏代码,因为$scope
可以用's‘替换。这是因为如果没有$
签名,angularJS将无法识别代码。
https://stackoverflow.com/questions/18698963
复制相似问题