配列をフィルタリングするカスタムパイプがあります。パイプは子コンポーネント内で使用され、子コンポーネントへのデータは入力パラメータを介して渡されます。入力データが変更されるとパイプは呼び出されません。子コンポーネントの内部でChangeDetectionStrategy.OnPushを使用するときに、私は別のやり方で対応する必要がありますか?入力が変更されたときにパイプ内の子コンポーネントが呼び出されない
編集
以下の例では、製品リストコンテナがngrxストアから製品を取得します。データは、入力パラメータを介して製品リストコンポーネントに渡されます。
商品リストコンポーネントには、いくつかの基準に基づいて行を除外するためのフィルタがあります。私が見ている問題は、入力値の変更時にパイプ関数が呼び出されないということです。パイプはコンポーネントの負荷で一度だけ呼び出されています。あなたのパイプがPure pipes
あるのでこと
@Component({
selector: 'product-list-container',
template: `
<app-product-list [productList]="productList$ | async"></app-product-list>
`
})
export default class ProductListContainer implements OnInit {
public productList$: Observable<Product[]>;
constructor(public store: Store<AppState>) {
}
ngOnInit() {
this.productList$ = this.store.select('productList');
}
}
@Component({
selector: 'app-product-list',
template: `
<div *ngFor="let product of productList | filterActiveProduct">
// More code here
</div>
`,
changeDetection: changeDetectionStrategy.onPush
})
export default class ProductList {
@Input() productList: Product[];
constructor() {
}
}
@Pipe({
name: 'fromNow'
})
export class filterActiveProduct {
transform(products: Product[], args: Array<any>): string {
return products.findAll(p => p.isActive);
}
}
おかげで、
関連するコードが含ましてください - というよりも言ったコードの記述を - 質問で。 – cartant
@cartant私は上記のサンプルコードを追加しました。ありがとう! – Yousuf
潜在的な解決策を見つけました。パイプ上にpure:falseを設定すると、入力が変更されたときに呼び出されます。 – Yousuf