ng-repeat 함수에 의해 반환된 아이템을 루프하려면 어떻게 해야 합니까?
div를 반복적으로 만들고 싶은데, 항목은 함수에 의해 반환되는 객체입니다.단, 코드리포트 오류는 10$digest() 반복에 도달했습니다.중단합니다! jsfiddle은 http://jsfiddle.net/BraveOstrich/awnqm/에 있습니다.http://jsfiddle.net/BraveOstrich/awnqm/
<body ng-app>
<div ng-repeat="entity in getEntities()">
Hello {{entity.id}}!
</div>
</body>
간단한 답변: 이러한 기능이 정말 필요합니까, 아니면 자산을 사용할 수 있습니까?http://jsfiddle.net/awnqm/1/
장답
알기 쉽게 하기 위해 ngRepeat는 오브젝트 배열에 대해서만 설명합니다.그리고 몇 가지 세부 사항은 생략하겠습니다.
AngularJS는 변경 검출에 더티 체크를 사용합니다.응용 프로그램이 시작되면 에 대해 실행됩니다.$digest
는 스코프의 계층에 대해 깊이 우선 트래버설을 수행합니다.모든 스코프에는 시계 목록이 있습니다.각 워치는 마지막 값을 가집니다(처음에는).initWatchVal
워치의 각에 대해서)는 「 」입니다.$digest
값을 (실행합니다).watch.get(scope)
합니다.watch.last
현재 값이 다음 값이 아닌 경우watch.last
첫 ) ('최초 비교용)$digest
dirty
로로 합니다.true
dirty == true
$digest
에서 다른 깊이 우선 트래버설을 시작합니다.$rootScope
$digest
==가짜 ==가짜 ==가짜 ==가짜 ==가짜 ==가짜 ==가짜 ==가짜 ==가짜 ==가짜 ==가짜 ==가짜 ==가짜.'10 $sec() 레퍼런스에 도달했습니다."가 기록됩니다.
에에에 대해서ngRepeat
.watch.get
값를합니다.getEntities
추가 정보가 HashQueueMap
캐시에 저장됨( by)hashKey
)의 경우)에 대하여watch.get
ngRepeat
하다hashKey
캐시에하지 않는 경우는, 「 」ngRepeat
캐시 저장, 새 범위 생성, 객체 배치, DOM 요소 생성 등
에 대해서.보통hashKey
에 의해 생성된 고유 번호입니다.단, 함수일 수도 있습니다. hashKey
나중에 사용하기 위해 생성한 후 객체에 저장됩니다.
이 예에서 오류가 발생하는 이유: 함수getEntities()
는 항상 새 개체와 함께 배열을 반환합니다.「」가 .hashKey
에 and and and and and and and and 。ngRepeat
, '캐시', '캐시'ngRepeat
watch.get
는 새로운 워치를 합니다.{{entity.id}}
는 먼저 watch.get
있다watch.last == initWatchVal
watch.get() != watch.last
$digest
을 사용하다 ★★★★★★★★★★★★★★★★★.ngRepeat
새 워치를 사용하여 새 스코프를 만듭니다.10월 10살
수정 방법
- 에 를 만들지 .
getEntities()
discl.discl.discl을 클릭합니다. - 할 추가해도 .
hashKey
방법을 가르쳐 주세요.예에 대해서는, 이 토픽을 참조해 주세요.
Angular를 아는 사람들은JS 내부에서는 내가 틀리면 고쳐줄 거야.
반복 범위를 벗어나 어레이를 초기화합니다.
<body ng-app>
<div ng-init="entities = getEntities()">
<div ng-repeat="entity in entities">
Hello {{entity.id}}!
</div>
</div>
</body>
이 내용은 여기에서 보고되었으며 다음과 같은 답변을 받았습니다.
getter는 유휴 상태가 아니며 모델을 변경합니다(호출될 때마다 새 배열을 생성).이로 인해 모형이 안정되기를 바라며 앵글을 계속 호출하게 되지만 앵글은 절대 포기하지 않고 예외를 발생시킵니다.
getter return 값은 동일하지만 동일하지 않은 것이 문제입니다.
메인 컨트롤러 외부로 어레이를 이동하면, 이 동작이 없어지는 것을 알 수 있습니다.
var array = [{id:'angularjs'}];
function Main($scope) {
$scope.getEntities = function(){return array;};
};
매번 같은 오브젝트를 반환하고 있기 때문입니다.함수 대신 스코프의 속성을 사용하도록 모델을 재설계해야 할 수 있습니다.
컨트롤러의 메서드 결과를 속성에 할당하고 ng:repeat을 실행하여 대처했습니다.
@przno 코멘트 기준
<body ng-app>
<div ng-repeat="item in t = angular.equals(t, getEntities()) ? t : getEntities()">
Hello {{item.id}}!
</div>
</body>
BTW second solution @Artem Andreev는 Angular 1.1.4 이상에서는 동작하지 않는 반면 첫 번째 솔루션으로는 문제가 해결되지 않는다고 말합니다.현재로선 이 솔루션이 기능면에서 단점이 없는 덜 뾰족한 솔루션이라고 생각합니다.
언급URL : https://stackoverflow.com/questions/12336897/how-to-loop-through-items-returned-by-a-function-with-ng-repeat
'prosource' 카테고리의 다른 글
spring-data-rest 통합 테스트가 simple json 요청으로 실패함 (0) | 2023.02.27 |
---|---|
WordPress의 모든 투고를 특집 이미지로 가져오려면 어떻게 해야 합니까? (0) | 2023.02.27 |
Promise의 종류를 개봉하는 방법 (0) | 2023.02.27 |
--db를 사용하여 백업 mongodump를 생성할 수 없습니다.인증 실패 (0) | 2023.02.27 |
JSON 개체를 JavaScript 배열로 변환하는 방법 (0) | 2023.02.27 |