Excellente question!
Donc, c'est un souci commun, non seulement avec les contrôleurs, mais aussi, potentiellement, avec les services qu'une directive pourriez avoir besoin pour effectuer son travail, mais n'avez pas forcément envie d'exposer ce contrôleur / service pour le "monde extérieur".
Je crois fermement que les données globales sont mauvais et doivent être évitées et cela s'applique à la directive des contrôleurs. Si nous prenons cette hypothèse, nous pouvons prendre plusieurs approches différentes pour définir les contrôleurs "localement". Tout en faisant de sorte que nous devons garder à l'esprit qu' un contrôleur devrait être encore "facilement" accessible aux tests unitaires , donc nous ne peut tout simplement cacher dans la directive de la fermeture. OMI possibilités sont:
1) tout d'Abord, nous pourrions simplement définir la directive du contrôleur sur un module de niveau, ex::
angular.module('ui.bootstrap.tabs', [])
.controller('TabsController', ['$scope', '$element', function($scope, $element) {
...
}])
.directive('tabs', function() {
return {
restrict: 'EA',
transclude: true,
scope: {},
controller: 'TabsController',
templateUrl: 'template/tabs/tabs.html',
replace: true
};
})
C'est une technique simple qui nous aide dans https://github.com/angular-ui/bootstrap/blob/master/src/tabs/tabs.js qui est basé sur Vojta.
Alors que c'est une technique très simple, il convient de noter qu'un contrôleur est toujours exposé à l'ensemble de l'application qui signifie que d'autres module pourrait éventuellement le remplacer. En ce sens, il rend un contrôleur local à AngularJS application (afin de ne pas polluer une fenêtre globale portée) mais aussi global pour tous les AngularJS modules.
2) Utiliser une fermeture de la portée et spécial des fichiers de configuration pour le test.
Si nous voulons cacher complètement un contrôleur de fonction on peut encapsuler le code dans une clôture. C'est une technique qui AngularJS. Par exemple, en regardant la NgModelController nous pouvons voir qu'il est défini comme un "global" en fonction de ses propres fichiers (et donc facilement accessible pour les tests) mais le fichier entier est enveloppé dans de la fermeture pendant le temps de construction:
Pour résumer: l'option (2) est "plus sûr", mais nécessite un peu de configuration pour le construire.