AngularJS:指令/依赖注入

时间:2016-03-30 06:35:56

标签: javascript angularjs

要向Angular添加依赖项,这就是文档告诉您的操作:

Source

//inject directives and services.
var app = angular.module('fileUpload', ['ngFileUpload']);
app.controller('MyCtrl', ['$scope', 'Upload', function ($scope, Upload) {...

但我们可以将指令直接注入控制器,如下所示:

var app = angular.module('fileUpload', []);
app.controller('MyCtrl', ['ngFileUpload','$scope', 'Upload', function (ngFileUpload,$scope, Upload) {...
  1. 如果没有,那么不向控制器提供此功能的原因是什么?
  2. 有没有办法在特定控制器加载时注入依赖项?

1 个答案:

答案 0 :(得分:1)

没有模块基本上是基础或工具箱"如果你愿意的话。您需要将一个模块注入另一个模块,以便它可以访问其工具" (过滤器/指令/服务等)。原因是该模块负责依赖性加载和操作顺序。这是当你要求一个"工具"从模块到控制器你可以确定它在那里(或者会抛出错误)。

  

模块可以将其他模块列为其依赖项。根据模块的不同,需要在加载需求模块之前加载所需的模块。换句话说,所需模块的配置块在需求模块的配置块之前执行。运行块也是如此。即使多个其他模块需要,每个模块也只能加载一次。

当您将一个模块注入另一个模块时,您说"模块A需要模块B"中的内容。现在,当您需要特定工具时,将其注入控制器,以便您可以访问该特定工具。

所以考虑一下:

var app = angular.module('myApp', ['ngFileUpload']);

app.controller('MyCtrl', ['$scope', 'Upload', function ($scope, Upload) {

  .....

  Upload.upload(uploadData).then(function (resp) {
       //success
  }, null, function (evt) {
       //upload progress
  });
  .....

}]);

因为您在ngFileUpload模块中注入myApp控制器现在可以从Upload模块注入ngFileUpload服务,控制器无需担心服务存在(如果不存在,您将从角度获得注入错误)。