调用数 组类型的RxJS主题的 .next()不会通知观察者

问题描述 投票:1回答:1

我正在构建一个过滤器,您可以在其中按类别进行过滤,您可以通过单击类别名称旁边的复选框来选择一个类别。

所以我有一个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>

所以添加或删除的类别发生了什么,(我在内部修改了

chosenCategories

数组,并使用它的值调用了.next()),我使用了更新后的数组调用了.next()。 。问题是,当

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()参数的数组发生更改:

    从长度0到1,已通知我,
  • 如果长度从1变为0,则会收到通知,
  • 但是如果长度从1变为2,或者从5-6,或者从8变为7,则不会收到通知
  • 我正在构建一个过滤器,您可以在其中按类别进行过滤,您可以通过单击类别名称旁边的复选框来选择一个类别。所以我有一个filterComponent,其中包含过滤器...
  • angular rxjs observers subject subject-observer
    1个回答
    2
    投票
    我的猜测是distinctUntilChanged()会过滤掉更改后的数组,因为从技术上讲,它是与以前相同的对象。
    © www.soinside.com 2019 - 2024. All rights reserved.