プロジェクトで Angular 5 を使用していますが、typescript エラーが発生します。
ERROR TypeError: Cannot read property 'indexOf' of undefined
私のコードがすべきことは、次のように入力の変更時にテンプレートを更新することです:
テンプレート:
<input #f (input)="filterResults(f.value)"/>
<div *ngIf="filteredCandidates.length">
<ul class="filtered-candidates-list">
<li *ngFor="let candidate of filteredCandidates">
{{ candidate.name }}
</li>
</ul>
</div>
そして component.ts:
private queryString: string;
private candidates: Candidate[] = []
private filteredCandidates: Candidate[] = [];
filterResults(queryString) {
this.candidatesService.filterCandidates().subscribe(candidates => this.candidates = candidates);
if (!queryString) {
return;
}
else {
this.candidates.filter(c => { c.name.indexOf(queryString) >= 0 });
}
}
c.name でメソッド .contains() を使用してみましたが、同じ結果が得られました。予想どおり、typeofcandidate.nameはまだ文字列であり、入力も文字列です。ただし、typescriptが組み込まれているため、文字列メソッドを使用できないようです。