/ / AngularJS: injection de directive / dépendance - javascript, angularjs

AngularJS: injection directive / dépendance - javascript, angularjs

Pour ajouter une dépendance à Angular, voici ce que les documents disent de faire:

La source

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

Mais pouvons-nous injecter la directive directement dans le contrôleur comme ceci:

var app = angular.module("fileUpload", []);
app.controller("MyCtrl", ["ngFileUpload","$scope", "Upload", function (ngFileUpload,$scope, Upload) {...
  1. Sinon, quelle est la raison de ne pas fournir cette capacité au contrôleur?
  2. Existe-t-il un moyen d'injecter des dépendances lors du chargement d'un contrôleur particulier?

Réponses:

1 pour la réponse № 1

Aucun module n'est essentiellement la base ou un"boîte à outils" si vous voulez. Il faut injecter un module dans un autre pour qu'il puisse avoir accès à ses "outils" (filtres / directives / services etc). La raison en est que le module est responsable du chargement des dépendances et de l'ordre des opérations. C'est ainsi que lorsque vous demandez un "outil" d'un module dans un contrôleur, vous pouvez être sûr qu'il est là (ou une erreur sera lancée).

Les modules peuvent répertorier d'autres modules commedépendances. Selon un module, le module requis doit être chargé avant le chargement du module requis. En d'autres termes, les blocs de configuration des modules requis s'exécutent avant les blocs de configuration du module requis. Il en va de même pour les blocs d'exécution. Chaque module ne peut être chargé qu'une seule fois, même si plusieurs autres modules l'exigent.

Lorsque vous injectez un module dans un autre, vous êtesdisant "Le module A requiert des éléments du module B". Maintenant, lorsque vous avez besoin d'un outil spécifique, c'est lorsque vous l'injectez dans le contrôleur afin que vous ayez accès à cet outil spécifique.

Considérez donc:

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
});
.....

}]);

Donc parce que vous injectez ngFileUpload votre contrôleur dans le myApp module peut maintenant injecter la Upload service de la ngFileUpload module et le contrôleur n'a pas besoin de s'inquiéter si le service est présent (sinon, vous obtiendrez une erreur d'injection angulaire).