3
による以外* ngFor項目にアクセスするが、別の方法で私は食料品(foods
)の*ngFor
リストを持っている要素を介してユーザマウスを置いは、アニメーションを実行し、そのインデックス
<div [@foodState]="food.state" *ngFor="let food of foods; trackBy let i=index" (mouseenter)="open(i)" (mouseleave)="close(i)">
open()
ですし、 close()
方法は、要素のプロパティは、新しいアニメーションの状態をトリガーstate
open(i: number): void{
this.foods[i].state = 'open';
}
と呼ば変える
animations: [
trigger('foodState', [
state('closed', style({
height: '36px'
})),
state('open', style({
height: '58px'
})),
])
]
私が直面してる問題は、私は検索用語に基づいてデータをフィルタリングする
@Pipe
を追加したいということです
:
:<div [@foodState]="food.state" *ngFor="let food of foods| searchPipe: searchTerm; trackBy let i=index" (mouseenter)="open(i)" (mouseleave)="close(i)">
@Pipe
がfilter()
機能を使用してfoods
リストを変換
transform(foods: any[], searchTerm: string): any[] {
foods = foods.filter(food => food.name.toUpperCase().indexOf(searchTerm.toUpperCase()) !== -1);
return foods;
}
ので、今、ユーザがホバリングしますその上に食べ物のインデックスは、もはやfoods
リストに正しい食品に対応していません。
元の配列インデックスからアクセスすることなく、繰り返しアイテムの状態をトリガーする方法はありますか?それとも私が*ngFor
リストにアクセスするデータにアプローチすべきもう一つの方法は何ですか?
<div [@foodState]="food.state" *ngFor="let food of foods; trackBy let i=index" (mouseenter)="open(food)" (mouseleave)="close(food)">
をし、同様に開閉方法を変更します:
ああ、非常にシンプル。ありがとう –