2014-08-28 1 views
0

내 앱에서 지시문을 만들려고합니다. 그러나, 나는 다른 장소에서 지시어를 사용해야하고 그들 자신의 컨트롤러를 가지고있다. 내 지시에 너무 지시자에 컨트롤러를 추가하는 방법은 무엇입니까?

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

      } 
     }; 
    } 
]) 

어떻게 하나 개의 지침에 두 개의 컨트롤러를 추가하는 방법은 무엇입니까?

감사합니다.

+1

난 당신이 당신이 컨트롤러를 주입하지 않아도 다른 방법 –

+0

에 대해 생각해야, 당신은 두 개의 컨트롤러를 삽입 할 수없는 생각 - : 여기

Plnkr는 각 지침의 구현에서 미리보기입니다 . 속성으로 지정된 제어기를 사용할 수 있습니다. 당신이 찾고있는 그런 종류입니까? – PSL

답변

1

namecontroller="@" 옵션을 사용할 수 있습니다.

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

      } 
     }; 
    } 

예 : -

당신이 controller= '@'이 요소의 속성에 지정된 속성 값과 등록 컨트롤러를 찾습니다 각도 (당신은 속성에 대한 이름을 지정할 수 있습니다)를 지정
<test controller="ctrl1"></test> 
    ..... 
    <test controller="ctrl2"></test> 

에서 언급 name 옵션.

  if (controllerDirectives) { 
     .... 

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

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

흠 ... [docs] (https://docs.angularjs.org/guide/directive)에서 찾을 수 없습니다. 어떻게 찾았 니? 그것은 혼란 스럽습니다. 고립 된 스코프 바인딩으로 바인드 할 때 사용하는 "@"와 같은 것을 사용하는 것은 어떨까요? 그리고 명시 적으로 문서화되지 않은'name' 속성은 컨트롤러 속성 이름을 지정하는 데 사용됩니다. 그래서'name : "ctrl" , 그리고'controller' 대신에'crtl' 속성을 사용할 것이지만 여전히'controller : "@",'...가 필요합니다 ... –

+0

각도 지시문을 보면서 오랜 시간을 찾았습니다. 시도했지만이 문서화되지 않은 이유를 모르겠습니다. 컨트롤러를 지정할 수있는 속성의 이름을 사용할 수 있습니다. 제어기 이름으로'@'를 찾는다. Isolate scope의'@'와는 아무런 관련이 없습니다. 그것들은 2 가지 구현입니다. – PSL

+0

@JasonGoemaat 각도 스 니펫의 섹션으로 업데이트 된 답변을 참조하십시오. – PSL

관련 문제