AngularJS - 指令无法访问所需的祖先控制器

时间:2015-04-14 12:03:30

标签: angularjs angularjs-directive

我需要从指令中访问祖先的指令控制器。为此,我在"孩子"上使用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='...'(虽然我已经尝试删除它并且抛出了相同的错误)。

您认为导致错误的是什么?

1 个答案:

答案 0 :(得分:1)

问题是我在ˆ使用^代替require: ^someDirCtrl ...我知道这很愚蠢。