2014-08-28 4 views
0

Я пытаюсь создать директиву в своем приложении. Однако мне нужно использовать директиву в разных местах, и у них есть собственный контроллер.Как добавить контроллеры в директиву?

так в моей директиве

directive('test', [function($popover) { 
     return { 
      restrict: 'E', 
      scope: false, 
      link: function(scope, elem, attrs) { 

      } 
     }; 
    } 
]) 

Как добавить два контроллера в одной директиве?

Спасибо!

+1

Я думаю, что вы не можете вводить два контроллера, вы должны думать о другом подходе –

+0

Вам не нужно вводить контроллер , Вы можете использовать контроллер, указанный как атрибут. Это то, что вы ищете? – PSL

ответ

1

Вы можете использовать name и controller="@".

.directive('test', [function($popover) { 
     return { 
      restrict: 'E', 
      scope: false, 
      controller : "@", 
      name:"controller", 
      template:'<div>{{value}}</div>', 
      link: function(scope, elem, attrs) { 

      } 
     }; 
    } 

Ex: -

<test controller="ctrl1"></test> 
    ..... 
    <test controller="ctrl2"></test> 

При указании controller= '@' Угловыми будет искать зарегистрированный контроллер со значением атрибута указанного атрибута элемента (Вы можете дать любое имя атрибута), упомянутый в name опция.

Plnkr

Вот отрывок из угловой реализации директивы: -

  if (controllerDirectives) { 
     .... 

      controller = directive.controller; 
      if (controller == '@') { 
       controller = attrs[directive.name]; 
      } 

      controllerInstance = $controller(controller, locals); 
+0

Хммм ... Не удается найти это в [документах] (https://docs.angularjs.org/guide/directive). Как вы это узнали? Это путают, как насчет использования того же «@», что и для привязки в привязке выделенной области, а явно недокументированное свойство «имя» используется для указания имени атрибута контроллера, поэтому вы можете иметь имя: «ctrl», , 'и он будет использовать атрибут' crtl' вместо 'controller', но вам все еще нужен' controller: @ @, '... –

+0

Я нашел это долгое время назад, смотря на реализацию угловой директивы, тогда i попробовал, но это не документировано, я не знаю почему. Вы можете использовать любое имя для атрибута, где вы можете указать контроллер. он ищет '@' в качестве имени контроллера. Он не имеет ничего общего с областью выделения '@'. Это две разные реализации. – PSL

+0

@JasonGoemaat См. Обновленный ответ в разделе из углового фрагмента. – PSL

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