Contents
see List작성일 2016. 09. 07.
AngularJS 형제 요소에 ng-repeat 사용하기
ng-repeat를 사용할 때 같은 레벨의 형제 요소들을 반복해야 하는 경우가 있습니다. ng-repeat-start와 ng-repeat-end를 활용하는 방법입니다.
1. 문제 상황
<!-- 원하는 결과 -->
<dt>제목1</dt>
<dd>내용1</dd>
<dt>제목2</dt>
<dd>내용2</dd>
<!-- 일반 ng-repeat로는 불가능 -->
<div ng-repeat="item in items">
<dt>{{item.title}}</dt>
<dd>{{item.content}}</dd>
</div>
<!-- 결과: <div>로 감싸짐 -->
2. ng-repeat-start / ng-repeat-end
<dl>
<dt ng-repeat-start="item in items">{{item.title}}</dt>
<dd ng-repeat-end>{{item.content}}</dd>
</dl>
<!-- 결과 -->
<dl>
<dt>제목1</dt>
<dd>내용1</dd>
<dt>제목2</dt>
<dd>내용2</dd>
</dl>
3. 테이블 행 그룹
<table>
<tr ng-repeat-start="user in users">
<td>{{user.name}}</td>
<td>{{user.email}}</td>
</tr>
<tr ng-repeat-end>
<td colspan="2">{{user.bio}}</td>
</tr>
</table>
<!-- 결과: 사용자당 2개 행 생성 -->
4. 여러 형제 요소
<!-- 3개 이상의 형제 요소도 가능 -->
<div ng-repeat-start="section in sections">
<h2>{{section.title}}</h2>
</div>
<p>{{section.intro}}</p>
<ul>
<li ng-repeat="item in section.items">{{item}}</li>
</ul>
<hr ng-repeat-end>
5. 조건부 형제 요소
<dt ng-repeat-start="item in items">{{item.title}}</dt>
<dd ng-if="item.hasDetail">{{item.detail}}</dd>
<dd ng-if="!item.hasDetail" ng-repeat-end>상세정보 없음</dd>
6. 대안: ng-include
<!-- 템플릿 분리 -->
<script type="text/ng-template" id="item-template">
<dt>{{item.title}}</dt>
<dd>{{item.content}}</dd>
</script>
<dl>
<ng-include ng-repeat="item in items"
src="item-template"></ng-include>
</dl>
7. 성능 최적화
<!-- track by로 성능 향상 -->
<dt ng-repeat-start="item in items track by item.id">
{{item.title}}
</dt>
<dd ng-repeat-end>{{item.content}}</dd>
일반 ng-repeat vs ng-repeat-start 비교
| 구분 | ng-repeat | ng-repeat-start/end |
|---|---|---|
| 래퍼 요소 | 필요 | 불필요 |
| 형제 요소 | 불가 | 가능 |
| 복잡도 | 간단 | 약간 복잡 |
| 사용 사례 | 일반 목록 | dl, 복합 테이블 |
주의사항
- ng-repeat-start와 ng-repeat-end는 반드시 쌍으로 사용
- 중첩 ng-repeat와 함께 사용 시 변수 충돌 주의
- Angular 1.2 이상에서 지원
javascript
| No | 작성일 | Title |
|---|---|---|
| 3384 | 2026. 08. 21. | Node.js API에서 요청 취소를 제대로 처리하는 방법: AbortSignal로 외부 작업 정리하기 |
| 3352 | 2026. 08. 13. | Node.js 응답이 간헐적으로 느릴 때: 이벤트 루프 지연 측정과 CPU 작업 분리 방법 |
| 3320 | 2026. 08. 04. | JavaScript fetch 요청을 안전하게 만드는 방법: timeout·재시도·오류 처리 실전 패턴 |
| 3288 | 2026. 07. 27. | Node.js 서버 무중단 배포를 위한 Graceful Shutdown 구현 가이드 |
| 3257 | 2026. 07. 19. | Node.js 대용량 파일 처리 가이드: 스트림과 backpressure로 메모리 사용량 제어하기 |
| 3232 | 2026. 07. 11. | Node.js 실무형 에러 처리: async/await에서 실패를 일관되게 분류하고 복구 속도 높이기 |
| 3174 | 2026. 07. 02. | Node.js 환경 변수 검증 가이드: process.env를 안전한 설정 객체로 바꾸기 |
| 3123 | 2026. 06. 24. | TypeScript 타입 좁히기 운영 가이드: unknown 입력을 안전한 도메인 객체로 바꾸기 |
| 3065 | 2026. 06. 16. | 브라우저 성능 병목 찾기: PerformanceObserver로 LCP·INP·긴 작업 로그 수집하기 |
| 2978 | 2026. 06. 08. | Node.js fetch 타임아웃과 재시도 설계: 외부 API 장애 전파 줄이기 |