require - 要求将另一个控制器传递到当前指令链接函数中。require 需要传入指令控制器的名称。如果找不到这样的控制器,则会引发错误。该名称可以带有前缀:
- ? - 不要引发错误。这使得 require 依赖项是可选的。
- ^ - 也在父元素上寻找控制器。
以上是官方文档中的定义。这里的歧义是什么是“指令控制器”。
以angularjs-ui bootstrap 项目中的 tabs 指令为例。
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
};
}]);
该pane
指令具有require: '^tabs'
,其中tabs
是其父元素上指令的名称,而附加到该指令的控制器的名称是TabsController
。从我自己对上述定义的解释来看,它应该require: '^TabsController'
不是require: '^tabs'
,这显然是错误的。请告诉我我的理解中缺少什么。