이번 실습에서는 Angular 템플릿의 @for 블록으로 데이터를 동적으로 반복해서 표시하는 방법을 알아봅니다.
NOTE: 이 동영상은 이전 문법을 사용하지만 핵심 개념은 동일합니다.
학습 목표
- 앱에 데이터 모음을 추가합니다.
@for로 새 데이터 모음의 항목들을 목록으로 표시합니다.
@for 개념 살펴보기
Angular의 @for는 템플릿에서 데이터를 동적으로 반복해서 표시하는 흐름 제어 블록입니다. 일반 JavaScript의 for 반복문과 비슷한 기능을 Angular 템플릿에 제공합니다.
@for로 배열을 순회할 수 있으며, 비동기로 가져온 배열도 순회할 수 있습니다. 이번 실습에서는 순회할 새 데이터 배열을 추가합니다.
자세한 내용은 흐름 제어 가이드를 참고하세요.
-
Home에 주택 데이터 추가하기현재
Home에는 주택 정보가 하나만 있습니다. 이 단계에서는HousingLocationInfo항목의 배열을 추가합니다.src/app/home/home.ts의Home클래스에서housingLocation프로퍼티를 삭제하세요.Home클래스에housingLocationList프로퍼티를 추가하세요. 다음 코드와 같이 수정하세요:home.ts에 housingLocationList 프로퍼티 추가하기
import {Component} from '@angular/core'; import {HousingLocation} from '../housing-location/housing-location'; import {HousingLocationInfo} from '../housinglocation'; @Component({ selector: 'app-home', imports: [HousingLocation], template: ` <section> <form> <input type="text" placeholder="Filter by city" /> <button class="primary" type="button">Search</button> </form> </section> <section class="results"> @for (housingLocation of housingLocationList; track $index) { <app-housing-location [housingLocation]="housingLocation" /> } </section> `, styleUrls: ['./home.css'], }) export class Home { readonly baseUrl = 'https://angular.dev/assets/images/tutorials/common'; housingLocationList: HousingLocationInfo[] = [ { id: 0, name: 'Acme Fresh Start Housing', city: 'Chicago', state: 'IL', photo: `${this.baseUrl}/bernard-hermant-CLKGGwIBTaY-unsplash.jpg`, availableUnits: 4, wifi: true, laundry: true, }, { id: 1, name: 'A113 Transitional Housing', city: 'Santa Monica', state: 'CA', photo: `${this.baseUrl}/brandon-griggs-wR11KBaB86U-unsplash.jpg`, availableUnits: 0, wifi: false, laundry: true, }, { id: 2, name: 'Warm Beds Housing Support', city: 'Juneau', state: 'AK', photo: `${this.baseUrl}/i-do-nothing-but-love-lAyXdl1-Wmc-unsplash.jpg`, availableUnits: 1, wifi: false, laundry: false, }, { id: 3, name: 'Homesteady Housing', city: 'Chicago', state: 'IL', photo: `${this.baseUrl}/ian-macdonald-W8z6aiwfi1E-unsplash.jpg`, availableUnits: 1, wifi: true, laundry: false, }, { id: 4, name: 'Happy Homes Group', city: 'Gary', state: 'IN', photo: `${this.baseUrl}/krzysztof-hepner-978RAXoXnH4-unsplash.jpg`, availableUnits: 1, wifi: true, laundry: false, }, { id: 5, name: 'Hopeful Apartment Group', city: 'Oakland', state: 'CA', photo: `${this.baseUrl}/r-architecture-JvQ0Q5IkeMM-unsplash.jpg`, availableUnits: 2, wifi: true, laundry: true, }, { id: 6, name: 'Seriously Safe Towns', city: 'Oakland', state: 'CA', photo: `${this.baseUrl}/phil-hearing-IYfp2Ixe9nM-unsplash.jpg`, availableUnits: 5, wifi: true, laundry: true, }, { id: 7, name: 'Hopeful Housing Solutions', city: 'Oakland', state: 'CA', photo: `${this.baseUrl}/r-architecture-GGupkreKwxA-unsplash.jpg`, availableUnits: 2, wifi: true, laundry: true, }, { id: 8, name: 'Seriously Safe Towns', city: 'Oakland', state: 'CA', photo: `${this.baseUrl}/saru-robert-9rP3mxf8qWI-unsplash.jpg`, availableUnits: 10, wifi: false, laundry: false, }, { id: 9, name: 'Capital Safe Towns', city: 'Portland', state: 'OR', photo: `${this.baseUrl}/webaliser-_TPTXZd9mOo-unsplash.jpg`, availableUnits: 6, wifi: true, laundry: true, }, ]; }IMPORTANT:
@Component데코레이터는 삭제하지 마세요. 다음 단계에서 이 코드를 수정합니다.
-
Home템플릿에서@for사용하기이제 앱에 데이터 모음이 있으므로
@for블록으로 각 항목을 브라우저에 표시할 수 있습니다.템플릿의
<app-housing-location>태그를 다음 코드로 수정하세요:home.ts의 Home 템플릿에 @for 추가하기
import {Component} from '@angular/core'; import {HousingLocation} from '../housing-location/housing-location'; import {HousingLocationInfo} from '../housinglocation'; @Component({ selector: 'app-home', imports: [HousingLocation], template: ` <section> <form> <input type="text" placeholder="Filter by city" /> <button class="primary" type="button">Search</button> </form> </section> <section class="results"> @for (housingLocation of housingLocationList; track $index) { <app-housing-location [housingLocation]="housingLocation" /> } </section> `, styleUrls: ['./home.css'], }) export class Home { readonly baseUrl = 'https://angular.dev/assets/images/tutorials/common'; housingLocationList: HousingLocationInfo[] = [ { id: 0, name: 'Acme Fresh Start Housing', city: 'Chicago', state: 'IL', photo: `${this.baseUrl}/bernard-hermant-CLKGGwIBTaY-unsplash.jpg`, availableUnits: 4, wifi: true, laundry: true, }, { id: 1, name: 'A113 Transitional Housing', city: 'Santa Monica', state: 'CA', photo: `${this.baseUrl}/brandon-griggs-wR11KBaB86U-unsplash.jpg`, availableUnits: 0, wifi: false, laundry: true, }, { id: 2, name: 'Warm Beds Housing Support', city: 'Juneau', state: 'AK', photo: `${this.baseUrl}/i-do-nothing-but-love-lAyXdl1-Wmc-unsplash.jpg`, availableUnits: 1, wifi: false, laundry: false, }, { id: 3, name: 'Homesteady Housing', city: 'Chicago', state: 'IL', photo: `${this.baseUrl}/ian-macdonald-W8z6aiwfi1E-unsplash.jpg`, availableUnits: 1, wifi: true, laundry: false, }, { id: 4, name: 'Happy Homes Group', city: 'Gary', state: 'IN', photo: `${this.baseUrl}/krzysztof-hepner-978RAXoXnH4-unsplash.jpg`, availableUnits: 1, wifi: true, laundry: false, }, { id: 5, name: 'Hopeful Apartment Group', city: 'Oakland', state: 'CA', photo: `${this.baseUrl}/r-architecture-JvQ0Q5IkeMM-unsplash.jpg`, availableUnits: 2, wifi: true, laundry: true, }, { id: 6, name: 'Seriously Safe Towns', city: 'Oakland', state: 'CA', photo: `${this.baseUrl}/phil-hearing-IYfp2Ixe9nM-unsplash.jpg`, availableUnits: 5, wifi: true, laundry: true, }, { id: 7, name: 'Hopeful Housing Solutions', city: 'Oakland', state: 'CA', photo: `${this.baseUrl}/r-architecture-GGupkreKwxA-unsplash.jpg`, availableUnits: 2, wifi: true, laundry: true, }, { id: 8, name: 'Seriously Safe Towns', city: 'Oakland', state: 'CA', photo: `${this.baseUrl}/saru-robert-9rP3mxf8qWI-unsplash.jpg`, availableUnits: 10, wifi: false, laundry: false, }, { id: 9, name: 'Capital Safe Towns', city: 'Portland', state: 'OR', photo: `${this.baseUrl}/webaliser-_TPTXZd9mOo-unsplash.jpg`, availableUnits: 6, wifi: true, laundry: true, }, ]; }[housingLocation]="housingLocation"에서 오른쪽housingLocation은 이제@for블록의 반복 변수를 가리킵니다. 변경 전에는Home클래스의 프로퍼티를 가리켰습니다.모든 변경 사항을 저장하세요.
브라우저를 새로고침해 주택 목록이 격자 형태로 표시되는지 확인하세요.
SUMMARY: 이번 실습에서는 @for 블록으로 Angular 템플릿에서 데이터를 동적으로 반복해서 표시했습니다. 또한 앱에 새 데이터 배열을 추가했습니다. 이제 애플리케이션은 브라우저에 주택 목록을 동적으로 표시합니다.
앱의 형태가 갖추어지고 있습니다. 잘하셨습니다.
이 실습에서 다룬 내용을 더 알아보려면 다음 문서를 참고하세요: