Angularjs需要来自指令的控制器

时间:2014-10-24 12:23:02

标签: javascript angularjs angularjs-directive

我正在尝试创建一个将在应用程序中的多个位置使用的指令,我希望它可以选择加入控制器。

使用控制器方法时

return {
      ...
      controller: 'BlogDashCourseCtrl',
      ...
      }

它让控制器变好了。但是当我需要它时

return {
      ...
      require: '^BlogDashCourseCtrl',
      ...
      link: function($scope, iElm, iAttrs) {
          $scope.title = iAttrs.title; // Do not share me with other directives
          if($scope.title === $scope.step) { // $scope.step comes from a shared scope
              ...
          }
      }
}

它无法找到控制器。

我不希望多次调用控制器。我只是希望指令共享一个范围,也有一个私有范围(所以指令中的$ scope不会冒泡)并用服务做一些事情。

1 个答案:

答案 0 :(得分:0)

指令附加到DOM节点。 DOM节点不能有两个范围。您可以共享父作用域,也可以创建一个已隔离的作用域并显式继承它。

BlogDashCourseCtrl:
    this.step = 'whatever'; //maybe $scope.step


SomeDirective:
return {
      ...
      require: '^BlogDashCourseCtrl',
      ...
      link: function($scope, iElm, iAttrs, blogDashCourseCtrl) {
          $scope.title = iAttrs.title; // Do not share me with other directives
          if($scope.title === blogDashCourseCtrl.step) { // $scope.step comes from a shared scope
              ...
          }
      }
}

请注意blogDashCourseCtrl不引用该指令/控制器的$scope,而是引用本身。 这里有extensive documentation,有例子。