我不明白在控制器中使用$inject
I don't understand the use of $inject in controllers
我对在 Angular 中注入完全感到困惑。我不知道在哪里使用它以及为什么。它是否仅与此处所述的工厂一起使用?
myController.$inject = ['$scope','notify'];
这里notify
是工厂的名称。
代码缩小后支持依赖关系注入的一种方法(如果您选择缩小)。
声明控制器时,该函数采用参数:
function ($scope, notify)
当您缩小代码时,您的函数将如下所示:
function (a, b)
由于 AngularJS 使用函数参数名称来推断 DI,因此您的代码会中断,因为 AngularJS 不知道a
或b
。
为了解决这个问题,他们提供了额外的方法来声明控制器(或其他服务/工厂/等):
对于控制器,请使用
$inject
方法 - 此处传递映射到控制器函数参数的文本数组。 因此,如果您提供['$scope', 'notify']
然后,函数的第一个参数的值将是与此控制器关联的 A 范围对象,第二个参数将是通知服务。
声明新的控制器、服务等时,可以使用数组文本语法。 在这里,你做这样的事情:
angular.module('myModule').controller('MyController', ['$scope', 'notify', function ($scope, notify) { ... }]);
数组作为控制器函数的参数将 DI 对象映射到函数参数。
在声明控制器等时,我更喜欢选项 #2,因为它更容易阅读/理解/交叉检查,因为它都在同一个地方。
为了补充@mark答案,重要的是要注意,以以下样式使用 $inject 方法:
MyController.$inject = ['$scope', 'notify'];
允许您在构建提供程序时添加注入依赖项,这是唯一不允许"友好"注释样式的角度配方即:
.controller('MyController', ['$scope', 'notify',...
要声明的依赖项。
你应该使用$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将无法识别代码。
当我们有ng-strict-di
属性时,必须使用这种格式
- 在指令控制器中使用$attrs时出现问题
- 有没有任何方法可以将控制器从文件加载到ui路由器$stateProvider中
- 从控制器返回后Ajax启动事件激发
- 获取@ResponseBody的一部分作为主干和Spring MVC控制器之间的参数
- 如何在单击复选框后调用控制器方法
- 在控制器和数据对象之间同步数据
- 将Javascript数组发送到控制器ASP.NET MVC
- 角度控制器结构
- 如何在Jquery中发布后将值从视图返回到控制器
- 将值从html传递到AngularJS控制器
- 从我的控制器返回一个不同于200的代码以触发ajax错误,这被认为是一种好的做法吗
- 从控制器继承了隔离的作用域以生成可重用的指令
- Flash Uploadify在调用我的MVC控制器时没有保留会话/授权
- 为什么不't我的变量在我的控制器中填充后在我的视图中呈现
- Nodejs API控制器,用于在API之间切换
- 如何在Angular单元测试中从另一个控制器的rootScope将方法添加到rootScope中
- 将不在模型中的数据返回到mvc控制器
- AngularJS-控制器和工厂-我在include/inject函数方面哪里出了问题
- Typescript$inject$timeout到指令中..在控制器中工作,而不是在链接中
- 我不明白在控制器中使用$inject