小编kri*_*tof的帖子

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

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

所以我有一个filterComponent,它包含它自己的过滤器,然后是一个filterService,它有一个类别属性Subject<Array<ICategory>>,这个属性用于将数据传递到productsComponent我订阅类别属性的位置。

当我想使用此模式传递一个简单的字符串时,此逻辑有效,但当我想传递对象数组时,它似乎不起作用。

在我的 filters.component.html 文件中,当复选框值发生变化时,我正在调用一个方法:

<li *ngFor="let category of categories">
        <mat-checkbox (change)="addOrRemoveCategory(category)" [(ngModel)]="category.isChecked">
                {{'category.' + category.Name | translate}}
        </mat-checkbox>
</li>
Run Code Online (Sandbox Code Playgroud)

addOrRemoveCategory 方法实现如下所示:

private addOrRemoveCategory(category: ICategory): void {
    if (!this.chosenCategories.includes(category)) {
        this.add(category);
    } else {
        this.remove(category);
    }
    this.filterService.categories.next(this.chosenCategories);
}
Run Code Online (Sandbox Code Playgroud)

所以无论一个类别发生了什么,被添加或删除,(我在内部修改了selectedCategories数组,我用它的值调用 .next() ),我用更新的数组调用 .next() 。

问题是,当selectedCategories数组为空时,我推送到它,并用它调用 .next() 时,我正确地获取了订阅者函数中的值,但是如果再次执行此操作,并且我有一个2 个元素数组,我调用 .next(this.chosenCategories),我的订阅者方法没有收到通知。

但是,一旦我使用空数组调用 .next() ,我的订阅者方法就会再次收到通知(因为我已经删除了之前选择的所有类别)。

订阅者方法:

this.categoriesChangeSubscription = this.filterService.categories
            .pipe(
                debounceTime(500),
                distinctUntilChanged()
            )
            .subscribe((categories: Array<ICategory>) => { …
Run Code Online (Sandbox Code Playgroud)

subject observers rxjs subject-observer angular

0
推荐指数
1
解决办法
246
查看次数

查询列表并选择前 10 个值

我有一个对象列表,其中每个对象都有一个名为“频率”的属性,我希望能够选择频率最高的前 10 个对象。

我看到了一些类似于我希望使用 LINQ 解决的解决方案,因此我们不胜感激。

c# linq asp.net list

-4
推荐指数
1
解决办法
5364
查看次数

标签 统计

angular ×1

asp.net ×1

c# ×1

linq ×1

list ×1

observers ×1

rxjs ×1

subject ×1

subject-observer ×1