AngularJS - 指令无法访问所需祖先的控制器
AngularJS - Directive can't access required ancestor's controller
我需要从指令访问祖先的指令控制器。为此,我在 "child" 指令上使用 require
属性,如您在以下代码中所见
mmDirectives.directive('mmMapActions', function() {
return {
restrict : 'E',
require : 'ˆmmSidebar',
link : function(scope, elem, attrs, mmSidebarCtrl) {...}
}
}
我在同一个模块上声明了另一个 mmSidebar
指令,并且它有一个关联的控制器,根据需要:
mmMapsDirectives.directive('mmSidebar', function() {
return {
restrict : 'E',
transclude : true,
scope : {...},
controller : function($scope) {...}
}
}
然后我有以下DOM
<div ng-controller='mmMapInteractionsController as mapInteractionsCtrl'>
<mm-sidebar class='sidebar' ng-if='mapInteractionsCtrl.isInitialised()'
map='mapInteractionsCtrl.map' ...>
<mm-map-actions></mm-map-actions>
</mm-sidebar>
</div>
但是,我仍然得到旧错误
Error: $compile:ctreq Missing Required Controller
这应该意味着mmMapActions
找不到mmSidebar
的控制器,但似乎关于DOM的结构的一切,至少,是正确的。
我怀疑它有另一个祖先控制器 mmMapInteractionsController
或 ng-if='...'
(尽管我已经尝试删除它并且抛出了同样的错误)。
您认为导致错误的原因是什么?
问题是我在 require: ^someDirCtrl
上使用的是 ˆ
而不是 ^
……愚蠢,我知道。
我需要从指令访问祖先的指令控制器。为此,我在 "child" 指令上使用 require
属性,如您在以下代码中所见
mmDirectives.directive('mmMapActions', function() {
return {
restrict : 'E',
require : 'ˆmmSidebar',
link : function(scope, elem, attrs, mmSidebarCtrl) {...}
}
}
我在同一个模块上声明了另一个 mmSidebar
指令,并且它有一个关联的控制器,根据需要:
mmMapsDirectives.directive('mmSidebar', function() {
return {
restrict : 'E',
transclude : true,
scope : {...},
controller : function($scope) {...}
}
}
然后我有以下DOM
<div ng-controller='mmMapInteractionsController as mapInteractionsCtrl'>
<mm-sidebar class='sidebar' ng-if='mapInteractionsCtrl.isInitialised()'
map='mapInteractionsCtrl.map' ...>
<mm-map-actions></mm-map-actions>
</mm-sidebar>
</div>
但是,我仍然得到旧错误
Error: $compile:ctreq Missing Required Controller
这应该意味着mmMapActions
找不到mmSidebar
的控制器,但似乎关于DOM的结构的一切,至少,是正确的。
我怀疑它有另一个祖先控制器 mmMapInteractionsController
或 ng-if='...'
(尽管我已经尝试删除它并且抛出了同样的错误)。
您认为导致错误的原因是什么?
问题是我在 require: ^someDirCtrl
上使用的是 ˆ
而不是 ^
……愚蠢,我知道。