2014-10-24 6 views
0

Я пытаюсь создать директиву, которая будет использоваться в нескольких местах приложения, и я хочу, чтобы она выбрала контроллер.Angularjs требует от контроллера директивы

При использовании метода контроллера

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 в директиве не пузырится) и делать некоторые вещи с помощью службы.

+0

Это не то, что делает параметр 'require'. Это не значит, что он наследует этот контроллер, но вы получаете доступ к нему (им) в функции 'link' (' link: function (scope, element, attrs, controllers) {') –

+0

Позвольте мне пересмотреть вопрос Sergui – Danuss

ответ

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, с примерами.

Смежные вопросы