【问题标题】:Angular 2 *ngFor items count outside the loopAngular 2 *ngFor 项目在循环外计数
【发布时间】:2018-06-08 21:03:35
【问题描述】:

我是 Angular 的新手,我有一个愚蠢的问题,我如何才能显示 *ngFor 循环之外的实际项目数?

我正在使用这样的过滤器和分页管道

*ngFor="let item of items| filterBy: ['name','category']: queryString | paginate: config; let i = index; let c = count"

我知道有一个变量'count',但当然它只在那个循环中可用,我怎样才能在组件中获取这个变量,我需要创建新组件,把它放在那个循环中并传递'count ' 通过指令还是有一些更简单、更清洁的方法?

【问题讨论】:

  • 获取它的长度并将其保存在一个变量中并使用它?
  • 您应该避免使用过滤管道。而是在控制器中过滤并将其保存到您显示的变量中。您可以只显示该数组的长度。
  • 您遇到了问题因为您正在使用管道来操作数据。不要这样做。业务逻辑属于你的代码。
  • hm.. 但管道很酷 :) 好的。将过滤移动到组件可能是一个很好的解决方案,谢谢
  • 我同意不使用过滤管道的建议。文档中也提到了它:angular.io/guide/pipes#appendix-no-filterpipe-or-orderbypipe :)

标签: angular count ngfor


【解决方案1】:

使用 RxJS 主题对我有用。

在组件中创建一个变量来保存计数,即filterCount,并为类型number创建一个RxJS Subject。 让subscription 取消订阅OnDestroy 上的Observable

filterCount = 0;
filteredCountSubject = new Subject<number>();
subscription: Subscription;

订阅filteredCountSubject 上的OnInit 生命周期挂钩。

ngOnInit(): void {
    this.subscription = this.filteredCountSubject.subscribe((count) => {
        this.filterCount = count;
    });
}

在模板中,您可以在模板中的任何位置使用filterCount 显示计数。使用

<div>{{filterCount}}</div>

并将filteredCountSubject 作为参数发送到filterBy 管道。

<div *ngFor="let item of items| filterBy: ['name','category']: queryString: filteredCountSubject  | paginate: config; let i = index; let c = count"></div>

filterBy 管道的transform 方法中,使用过滤数组的计数执行filteredCountSubject.next。即

transform(items: Array<any>, filterConfig: FilterCofig): Array<any> {
    // Arguments sent from HTML.
    const args = arguments;

    // CODE TO FILTER ITEMS BASED ON PARAMETERS.

    // Get the "filterredCountSubj" from arguments.
    // Remember that the argument index of "filteredCountSubject" is 3. As "items" is first argument.
    const filterredCountSubj = args[3];
    if (filterredCountSubj) {
        filterredCountSubj.next(items.length);
    }
    return items;
}

希望对你有帮助。

【讨论】:

  • 这对我很有用,谢谢!我可以通过异步管道主题而不是将计数存储在单独的属性中来简化它
猜你喜欢
  • 2017-03-30
  • 1970-01-01
  • 2017-03-04
  • 2017-02-16
  • 2021-06-04
  • 2016-06-22
  • 2017-09-09
  • 1970-01-01
  • 2017-04-05
相关资源
最近更新 更多