2014-03-02 5 views
1

누군가가 나를 설명하거나 다음 질문을 설명하는 문서를 가리킬 수 있습니다. link 함수에서 '@'매핑 된 속성을 설정할 수 없습니다. 지령. 그러나 '='매핑 된 속성은 지시문의 link 함수에서 특정 값으로 설정할 수 있습니다. 이 지침은 렌더링각도 지시문의 링크 함수에 = 및 @ 속성을 설정하면

directive('myDir', function() { 
    return { 
    scope: { 
     byValue: '@', 
     byRef: '='}, 
    template: '<span>byValue: {{byValue}}<br>byRef: {{byRef}}</span>', 
    link: function(scope) { 
     scope.byValue = 'Custom Value set for byValue'; //this call is ignored!!! 
     scope.byRef = 'Custom Value set for byRef'; 
    } 
    }; 

: 작동 예는 here in jsbin

나는 다음과 같은 코드를 의미를 찾을 수 있습니다

 
byValue: myProp 
byRef: Custom Value set for byRef 

감사합니다 좋은 하루 되세요!

가브리엘

답변

0

개체를 범위 속성으로 지정하면 격리 된 범위가 만들어집니다.

@은 로컬/지시어 범위 속성을 DOM 속성의 평가 된 값에 바인딩합니다. DOM 속성은 문자열이므로 결과는 항상 문자열입니다. 이런 종류의 편도는 속성 값이 아닌 평가 된 속성 값으로 바인딩됩니다.

=은 로컬/디렉티브 범위 속성을 부모 범위 속성에 바인딩합니다. 이것은 양방향 바인딩과 같습니다.

는 예를 들어, 당신은

<tag test1="name"></tag> 

이 같은 HTML을 작성 가정 해 봅시다 당신은

을 얻을 것이다 당신은 당신이

scope: { 
    nameProp: '=test1', 
    nameAttr: '@test1' 
} 

했다 지시문에서 범위 값

$scope.name = "MyName" 

nameProp = "MyName" 
nameAttr = "name" 

당신이 부모에 액세스 할 수 있습니다이

scope: 
{ 
    byValue: '@', 
    byRef: '=' 
} 

이 지침 내에서 그리고 그 반대에서 byRef 속성을 스코프 수행 할 때. 당신이 byValue의 경우

byRef: Custom Value set for byRef 

을 받고있는 이유 즉, 지시 $Scope.byValue는 부모의 속성 값 스코프 byValue으로 채워되어있는 귀하의 경우 아마도 myProp 경우.

+0

답변 감사합니다 Muctadir. 나는 당신의 대답을 언변 할 수는 있지만 여전히 문제가 있습니다. 필자는'link' 함수에서 범위의'byValue' 속성을 설정하고 있습니다. 따라서 렌더링 된 뷰의'link' 함수에서 설정된 값을 가질 것으로 기대됩니다. 아쉽게도 렌더링 된 뷰는 외부 범위에서 매핑 된 값을 표시합니다. 이 앵귤러는'link' 함수 호출 후에 매핑 된 속성의 값을'@ '로 설정합니다. 그걸 확인해 주시겠습니까? – Gabriel

관련 문제