2014-10-05 4 views
0

필자가 만든 지침의 부모 범위에 기본적으로 액세스 할 수 있기를 원하지만 요소에 배치 한 특성에 액세스 할 수 있기를 원합니다.부모 범위에 대한 액세스를 유지하면서 사용자 지정 지시문에서 요소 특성에 액세스하는 방법은 무엇입니까?

예를 들어

관련 JS

app.directive('testDirective', function(){ 
    return { 
     restrict:"E", 
     templateUrl:"directive.html", 
     scope:{ 
      testAttribute: '=' 
     } 
    }; 
}); 

app.controller('mainCtrl', function($scope){ 
    $scope.name = 'henry' 
} 

index.html을

<div ng-controller="mainCtrl"> 
    <test-directive test-attribute="Hello"></test-directive> 
</div> 

directive.html

{{testAttribute}} 
{{name}} 

출력이 "안녕하세요"대신

"안녕하세요 헨리"의입니다 그래서 명확하게 rify, 내가 할 수 있기를 원하는 것은 속성과 부모 범위에 액세스하는 것입니다.

+0

directive.html에서 대신'{{$ parent.name}} '을 사용하여'name' 속성에 액세스 할 수 있습니다. 그러나 재사용을 촉진하지 않기 때문에 적절하지 않습니다. – ryeballar

답변

1

당신이하려는 일에 양방향 바인딩이 필요하지 않습니다. 속성으로 지정된 텍스트에 액세스하려고합니다. 당신은 귀하의 지침을 작성할 수 있습니다 - 지시어 설정 지금 여기

.directive('testDirective', function(){ 
    return { 
     restrict:"E", 
     //scope:true, //apply if required 
     templateUrl:"directive.html", 
     link:function(scope, elm, attrs){ 
      scope.testAttribute = attrs.testAttribute; //Get it from attributes 
     } 
    }; 
}); 

Demo

범위 속성은 부모 범위 자체를 사용하는 것입니다. 그러나 이상적인 시나리오에서는 scope:true (상위의 하위 범위) 또는 2 way binding 위트 격리 범위를 사용할 수 있습니다. 그러나이 시점에서, 원래 목표가 무엇인지 확실하게 알지 못했기 때문에 귀하의 질문에 기반한 해결책입니다.

그래서 요약 : -

은 내가

가 분리 된 범위를 제거하고 단지 부모의 범위를 사용 만든 지침의 부모 범위에 액세스 할 수 있어야합니다.

하지만 요소에 배치 한 속성에 액세스 할 수 있기를 원합니다.

attrs 링크 함수의 인수 (attrs.testAttribute)를 사용하십시오. 바운드 값으로 평가하려면 do (scope.$eval(attrs.testAttribute))

+0

철저한 설명 주셔서 감사합니다. 잘 작동하지만, 하나 이상의 지시어가있을 때 마지막 지시문의 속성을 취하여 모든 지시문에 적용하는 것처럼 보입니다. [예] (http://plnkr.co/edit/XPilCbNtBJ5HgvSUrLe3?p=preview) – Joel

+0

이렇게 ... http://plnkr.co/edit/IGc3tK?p=preview. 내 대답의 마지막 줄. 당신은 또한 2 웨이 바인딩 (필요하다면)을 사용한다. – PSL

+0

굉장합니다, 고맙습니다. – Joel

관련 문제