2015-01-23 11 views
0

templateUrl을 사용하여 사용해야하는 마크 업을 지정하는 '마스터'가 있습니다. 해당 템플릿 내에서 'rows'지시문을 사용하여 div의 레이아웃을 봅니다. 따라서 'master'지시문은 'rows'에 대한 일종의 부모입니다.angularjs 지시어 사이의 통신

'rows'지시문도 templateUrl을 사용합니다. 'master'와 'rows'지시어는 많은 경우에 다시 사용되지만 각 행마다 'rows'지시어 레이아웃을 다르게해야합니다. 이렇게하면 'rows'지시어에 속성을 사용하는 것을 방지 할 수있다.

'master'지시어에 속성을 추가하고 'rows'지시문에 통과시켜야합니다.

내가 수행 할 수있는 방법이 있습니까? Inter-directive communication에 관한 EggHead 튜토리얼을 보았습니다. 그러나 그것은 'parent'에 대한 애트리뷰트로 'child'지시어를 사용합니다.

나는 또한 두 사람 사이의 의사 소통을 위해 서비스를 사용할 수 있다고 읽었지 만, 어떻게해야할지 잘 모르겠습니다. Angular의 $broadcast이 작동 할 수는 있지만 행 수가 많으면 많을 수 있으며 연속적으로 수행되지 않으면 레이아웃이 엉망이 될 수 있습니다.

+0

포스트 jsFiddle에 뭔가,하지만 내 머리 위로 떨어져이 범위를 사용 : '@'보테의 하위 지침 정의를. –

답변

1

일부는 이벤트를 사용해야한다고 주장하지만, 데이터를 저장하는 지시문 레벨 컨트롤러가 더 좋을 것이라고 생각합니다. 지시문은 마스터 지시문에 따라 다르므로 지시문에 이점을 사용하고 공유 정보를 저장할 수 있습니다.

module.directive('masterDir', function() { 
    return { 
     // Requiring yourself makes 
     // the directive level controller 
     // available in the link function 
     require: 'masterDir', 
     controller: function($scope) { 
      // The return is needed to support Angular 1.2 
      return this; 
     }, 
     link: { 
      pre: function(scope, element, attrs, masterDirCtrl) { 
       masterDirCrtl.someAttribute = attrs.someAttributeFromTheDom; 
      }, 
      post: function() { 
      } 
     } 
    } 
}); 


module.directive('rowDir', function() { 
    return { 
     require: 'masterDir', 
     link: function(scope, element, attrs, masterDirCtrl) { 
      var parentDirectiveAttr = masterDirCrtl.someAttribute; 
     } 
    } 
}); 
+0

감사! 이것은 아주 잘 작동했습니다. – Lazloman

관련 문제