Angularの公式チュートリアルをやっていく その9 - Use *ngFor in templates
Angularの公式チュートリアル「はじめての Angularアプリ」を進めていきます。
一覧
Angularの公式チュートリアルをやっていく その1 - Introduction
Angularの公式チュートリアルをやっていく その2 - Hello world
Angularの公式チュートリアルをやっていく その3 - Create home component
Angularの公式チュートリアルをやっていく その4 - Create housing location component
Angularの公式チュートリアルをやっていく その5 - Create an interface
Angularの公式チュートリアルをやっていく その6 - Add inputs to components
Angularの公式チュートリアルをやっていく その7 - Add property binding to components
Angularの公式チュートリアルをやっていく その8 - Add dynamic values to templates
Angularの公式チュートリアルをやっていく その9 - Use *ngFor in templates
Angularの公式チュートリアルをやっていく その10 - Angular services
Angularの公式チュートリアルをやっていく その11 - Add routing
Angularの公式チュートリアルをやっていく その12 - Customize the details page
Angularの公式チュートリアルをやっていく その13 - Integrate Angular forms
Angularの公式チュートリアルをやっていく その14 - Add search functionality
Angularの公式チュートリアルをやっていく その15 - Add HTTP communication
今回やるのは、↓の部分です。
コンポーネントを繰り返し描画する
今回使用するngFor
は、コンポーネントの繰り返し構文に用いるコードのようです。
実際に実装してみましょう。
下記のようにhome.component.ts
を更新しましょう。
import { Component } from '@angular/core';
import { CommonModule } from '@angular/common';
import { HousingLocationComponent } from '../housing-location/housing-location.component';
import { HousingLocation } from '../housinglocation';
@Component({
selector: 'app-home',
standalone: true,
imports: [CommonModule, HousingLocationComponent],
template: `
<section>
<form>
<input type="text" placeholder="Filter by city" />
<button class="primary" type="button">Search</button>
</form>
</section>
<section class="results">
<app-housing-location
+ *ngFor="let housingLocation of housingLocationList"
[housingLocation]="housingLocation"
></app-housing-location>
</section>
`,
styleUrls: ['./home.component.css'],
})
export class HomeComponent {
- housingLocation: HousingLocation = {
- id: 9999,
- name: 'Test Home',
- city: 'Test city',
- state: 'ST',
- photo: 'assets/example-house.jpg',
- availableUnits: 99,
- wifi: true,
- laundry: false,
- };
+ housingLocationList: HousingLocation[] = [
+ {
+ id: 0,
+ name: 'Acme Fresh Start Housing',
+ city: 'Chicago',
+ state: 'IL',
+ photo: '/assets/bernard-hermant-CLKGGwIBTaY-unsplash.jpg',
+ availableUnits: 4,
+ wifi: true,
+ laundry: true
+ },
+ {
+ id: 1,
+ name: 'A113 Transitional Housing',
+ city: 'Santa Monica',
+ state: 'CA',
+ photo: '/assets/brandon-griggs-wR11KBaB86U-unsplash.jpg',
+ availableUnits: 0,
+ wifi: false,
+ laundry: true
+ },
+ {
+ id: 2,
+ name: 'Warm Beds Housing Support',
+ city: 'Juneau',
+ state: 'AK',
+ photo: '/assets/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: '/assets/ian-macdonald-W8z6aiwfi1E-unsplash.jpg',
+ availableUnits: 1,
+ wifi: true,
+ laundry: false
+ },
+ {
+ id: 4,
+ name: 'Happy Homes Group',
+ city: 'Gary',
+ state: 'IN',
+ photo: '/assets/krzysztof-hepner-978RAXoXnH4-unsplash.jpg',
+ availableUnits: 1,
+ wifi: true,
+ laundry: false
+ },
+ {
+ id: 5,
+ name: 'Hopeful Apartment Group',
+ city: 'Oakland',
+ state: 'CA',
+ photo: '/assets/r-architecture-JvQ0Q5IkeMM-unsplash.jpg',
+ availableUnits: 2,
+ wifi: true,
+ laundry: true
+ },
+ {
+ id: 6,
+ name: 'Seriously Safe Towns',
+ city: 'Oakland',
+ state: 'CA',
+ photo: '/assets/phil-hearing-IYfp2Ixe9nM-unsplash.jpg',
+ availableUnits: 5,
+ wifi: true,
+ laundry: true
+ },
+ {
+ id: 7,
+ name: 'Hopeful Housing Solutions',
+ city: 'Oakland',
+ state: 'CA',
+ photo: '/assets/r-architecture-GGupkreKwxA-unsplash.jpg',
+ availableUnits: 2,
+ wifi: true,
+ laundry: true
+ },
+ {
+ id: 8,
+ name: 'Seriously Safe Towns',
+ city: 'Oakland',
+ state: 'CA',
+ photo: '/assets/saru-robert-9rP3mxf8qWI-unsplash.jpg',
+ availableUnits: 10,
+ wifi: false,
+ laundry: false
+ },
+ {
+ id: 9,
+ name: 'Capital Safe Towns',
+ city: 'Portland',
+ state: 'OR',
+ photo: '/assets/webaliser-_TPTXZd9mOo-unsplash.jpg',
+ availableUnits: 6,
+ wifi: true,
+ laundry: true
+ }
+ ];
}
今回も例によって画像は用意してくれていていないので、自分で持ってきて格納しましょう。
このサイトで「家」と調べて適当な画像を持ってきて、assets
フォルダにファイル名を変えて保存します。
ちゃんと表示されましたね。
画像では見切れていますが、全て表示されています。
template
では
<app-housing-location
*ngFor="let housingLocation of housingLocationList"
[housingLocation]="housingLocation"
></app-housing-location>
と一つのタグしか記述していないのに、10個のコンポーネントが並んでいます。
これが繰り返しの力です。
housingLocationList
がデータ配列のプロパティ名であり、これをlet ~~ of ~~
構文で使用することで、繰り返しを実現しています。
これまで画面表示部分の繰り返しはJSP、JSX、PHPなどいろいろ使ってきましたが、今回のngFor
は結構特殊な書き方ですね。新鮮です。
画面表示変化しなかったり、エラーが起きて上手くいかない場合は、次のことが考えられます。
- 変更したファイルを保存していない
- 変更したコードが間違っている
- 変更箇所以外のコードも間違って削除してしまった
何か間違いがないか、今一度確認してみましょう。
これにてUse *ngFor in templatesは完了です。
← 前へ Angularの公式チュートリアルをやっていく その8 - Add dynamic values to templates
→ 次へ Angularの公式チュートリアルをやっていく その10 - Angular services
Discussion