2013-02-02 1 views
21

당신은 어떻게 이런 일에 대한 범위 값을 설정 않습니다지시어 범위에서 ng-repeat 항목에 어떻게 액세스합니까?

<div ng-controller="MyCtrl"> 
     <my-element ng-repeat="p in people" person='p'></my-element> 
</div> 
var myApp = angular.module('myApp',[]); 

myApp.directive('myElement', function(){ 
    return { 
     restrict: 'E', 
     template: '<div>{{ name }}</div> <div>{{ age }}</div>' 
    } 
}); 

function MyCtrl($scope) { 
    $scope.people = [{ name: 'Mike', age: 20 },{name: 'Peter', age: 22 }]; 
} 

답변

25

각 반복하기 때문에 다음

template: '<div>{{ p.name }}</div> <div>{{ p.age }}</div>' 

템플릿 작업을 의미한다 "범위 값을 설정"에 의한 경우 ng-repeat는 새 하위 범위를 만들고 해당 범위에 p이 정의되어 있습니다. 당신의 지시가 분리 범위를 생성되지 않기 때문에, 당신은 person 속성이 필요하지 않습니다, 그래서 이것은 위의 작동 : 당신이 분리 범위를 원하는 경우

<my-element ng-repeat="p in people"></my-element> 

사용

<my-element ng-repeat="p in people" person='p'></my-element> 

return { 
    restrict: 'E', 
    scope: { 
     person: '=' 
    }, 
    template: '<div>{{ person.name }}</div> <div>{{ person.age }}</div>' 
} 
+1

이 사람 "사람 = 'p' '의 유효한'ng-repeat ="p 형식입니다. 나는 문서에 언급 된 것을 보지 못하고 나를 위해 오류를 준다. 감사합니다 – bsr

+1

@bsr, 유효해야합니다 : [작동 fiddle] (http://jsfiddle.net/mrajcok/xgxQJ/) –

+0

피들에 대 한 감사 마크 – bsr

1

지시어 범위를 정의 할 때 '@'를 사용하고 싶습니다. 당신이 지침에서 격리 된 범위를 만들 필요가 없습니다

return { 
    scope: '@', 
    link: function(scope) { 
     console.log(scope.p); //It can now be accessed because of '@' 
    } 
} 
+0

은 '@'없이도 액세스 할 수 있습니다. – asologor

3

:이 링크에서, 예를 들어, 페이지에 액세스하는 범위를 격리 지시를 할 수 있습니다. ng repeat가 자동으로이 작업을 수행합니다. 그래서 그냥 제거 :이 지침에서

을 : 당신의 지시에

person='p' 

당신이

$scope.p.personAttribute 
같은 액세스 할 수 있습니다 :
scope: { 
    person: '=' 
}, 

과 NG 반복 HTML 마크 업에

여기에 설명 된 것과 같습니다. angularjs-pass-instance-of-each-ng-repeat-in-html-to-directive

관련 문제