繁体   English   中英

AngularJS:指令/依赖注入

[英]AngularJS: directive/dependency injection

要添加对Angular的依赖关系,这是文档要执行的操作:

资源

//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. 当特定控制器加载时,有没有办法注入依赖关系?

如果您愿意的话,没有模块本质上是基础或“工具箱”。 您需要将一个模块注入另一个模块,以便该模块可以访问其“工具”(过滤器/指令/服务等)。 原因是该模块负责依赖性加载和操作顺序。 这样,当您从模块向控制器请求“工具”时,可以确保它在那里(否则将引发错误)。

模块可以列出其他模块作为它们的依存关系。 取决于模块意味着需要在加载需求模块之前先加载需求模块。 换句话说,所需模块的配置块先于所需模块的配置块执行。 运行块也是如此。 每个模块只能加载一次,即使其他多个模块也需要加载一次。

当您将一个模块注入另一个模块时,您会说“模块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模块中的控制器现在可以从ngFileUpload模块注入Upload服务,并且控制器无需担心该服务是否存在(如果不存在,则您会从angular中得到注入错误)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM