Was bedeutet "erfordern" von Direktivendefinitionsobjekten?
require - Erfordert, dass ein anderer Controller an die aktuelle Direktivenverknüpfungsfunktion übergeben wird. Die Anforderung benötigt einen Namen des Direktiven-Controllers, der übergeben werden soll. Wenn kein solcher Controller gefunden werden kann, wird ein Fehler ausgelöst. Dem Namen kann Folgendes vorangestellt werden:
? - Erhebe keinen Fehler. Dies macht die erforderliche Abhängigkeit optional.^ - Suchen Sie den Controller auch für übergeordnete Elemente.Oben ist die Definition aus den offiziellen Dokumenten. Die Mehrdeutigkeit ist hier, was genau ein "Direktiven-Controller" ist.
Nehmen Sie dietabs-Direktive aus dem anglejs-ui-Bootstrap-Projekt, als Beispiel.
angular.module('ui.bootstrap.tabs', [])
.controller('TabsController', ['$scope', '$element', function($scope, $element) {
... // omitted for simplicity
}])
.directive('tabs', function() {
return {
restrict: 'EA',
transclude: true,
scope: {},
controller: 'TabsController',
templateUrl: 'template/tabs/tabs.html',
replace: true
};
})
.directive('pane', ['$parse', function($parse) {
return {
require: '^tabs',
restrict: 'EA',
transclude: true,
scope:{
heading:'@'
},
link: function(scope, element, attrs, tabsCtrl) {
... // omitted for simplicity
},
templateUrl: 'template/tabs/pane.html',
replace: true
};
}]);
Daspane
Richtlinie hatrequire: '^tabs'
, in welchemtabs
ist der Name einer Direktive in ihrem übergeordneten Element, während der Name des Controllers, der an diese Direktive angehängt ist, lautetTabsController
. Nach meiner eigenen Interpretation der obigen Definition hätte es so sein müssenrequire: '^TabsController'
nichtrequire: '^tabs'
und das ist offensichtlich falsch. Bitte sagen Sie mir, was mir in meinem Verständnis fehlt.