我正在构建一个过滤器,您可以在其中按类别进行过滤,您可以通过单击类别名称旁边的复选框来选择一个类别。
所以我有一个filterComponent
,它包含它自己的过滤器,然后是一个filterService
,它具有categories属性,它是一个Subject<Array<ICategory>>
,此属性用于将数据传递到[ C0]我订阅了[[categories属性。
在我的filters.component.html文件中,当复选框值更改时,我正在调用一个方法:
productsComponent
addOrRemoveCategory方法实现看起来像:
<li *ngFor="let category of categories"> <mat-checkbox (change)="addOrRemoveCategory(category)" [(ngModel)]="category.isChecked"> {{'category.' + category.Name | translate}} </mat-checkbox> </li>
所以添加或删除的类别发生了什么,(我在内部修改了数组,并使用它的值调用了.next()),我使用了更新后的数组调用了.next()。 。问题是,当chosenCategories
chosenCategories
数组为空时,我将其压入该数组,然后调用.next(),我可以在我的订户函数中正确获取该值,但是如果执行此操作再次,我有一个2个元素的数组,并且我调用.next(this.chosenCategories),未通知我的订户方法。但是,一旦我用空数组调用.next(),我的订户方法就会再次收到通知(因为我已经删除了之前选择的所有类别)。>>订户方法:
private addOrRemoveCategory(category: ICategory): void {
if (!this.chosenCategories.includes(category)) {
this.add(category);
} else {
this.remove(category);
}
this.filterService.categories.next(this.chosenCategories);
}
我做错什么了吗?我必须处理与字符串不同的数组吗?
结论:如果我用作.next()参数的数组发生更改: