Angular のngFor ディレクティブの使い方
AngularにはngForディレクティブというディレクティブが標準で用意されています。
for文でループする機能です。記述方法は以下の通りです。
<xxx *ngFor='let 仮引数 of コンポーネントのプロパティ'>
具体的には
<div *ngFor='let tmp of list>~</div>
というように記述します。
dell.component.ts
import { Component, OnInit } from '@angular/core'; @Component({ selector: 'app-dell', templateUrl: './dell.component.html', styleUrls: ['./dell.component.css'] }) export class DellComponent implements OnInit { constructor() { } public readonly list = [// listプロパティ {'a':'aaa','b':'test1'}, {'a':'bbb','b':'test2'}, {'a':'ccc','b':'test3'} ]; ngOnInit() { } }
dell.component.html
<table> <tr *ngFor='let tmp of list'> <!-- コンポーネントのlistプロパティ --> <td>{{tmp.a}}</td> <td>{{tmp.b}}</td> </tr> </table>
以下のように表示されます。
詳細は「AngularとTypeScriptでSPAを作成する」を参照ください。
Reactive Formsで検索する
人間のリストを作成してReactive Formsから検索して検索結果をngForディレクティブでフィルターしてレンダリングしてみます。
インタフェース作成
人間の情報のインタフェース作成します。
$ ng g interface Human
human.ts
export interface Human { name: string age: number }
コンポーネント作成
コンポーネント作成します。
$ ng g c human --standalone --skip-tests
human.component.ts
import { Component, Input } from '@angular/core'; import { CommonModule } from '@angular/common'; import { Human } from '../human'; @Component({ selector: 'app-human', standalone: true, imports: [CommonModule], templateUrl: './human.component.html', styleUrls: ['./human.component.css'] }) export class HumanComponent { @Input() humanList!: Human; }
human.component.html
<div> <p> Name:{{humanList.name}}<br> Age:{{humanList.age}}<br> </p> </div>
app.component.tsとapp.component.htmlを編集します。
app.component.ts
人間のリストはinitDataとして定義しています。
import { Component } from '@angular/core'; import { CommonModule } from '@angular/common'; import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; import { HumanComponent } from './human/human.component'; import { Human } from './human'; @Component({ selector: 'app-root', standalone: true, imports: [CommonModule, ReactiveFormsModule,HumanComponent], templateUrl: './app.component.html', styleUrls: ['./app.component.css'] }) export class AppComponent { title = 'reactive-test'; initData: Human[] = [ {name:'takahashi',age:20}, {name:'yamada',age:30}, {name:'sakamoto',age:40} ] filterData: Human[] = this.initData formData = new FormGroup({ search: new FormControl('') }); search(name: string) { this.filterData = this.initData.filter(d=>d.name.includes(name)) } }
app.component.html
テンプレート参照変数(#x)を使用して入力部品の値を、searchメソッドの引数に渡します。
<form [formGroup]="formData" (submit)="search(x.value)"> <label for="search">Name</label> <input id="search" type="text" #x formControlName="search"> <br> <button type="submit">search now!</button> </form> <app-human *ngFor="let xx of filterData" [humanList]="xx"> </app-human>
ローカル起動します。
$ng s --open
GitHub - takahashi-h5/reactive-test: reactive-test
reactive-test. Contribute to takahashi-h5/reactive-test development by creating an account on GitHub.
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント