javascript - ngfor 中的自定义过滤器管道〜错误 TypeError : Cannot read property 'filter' of undefined

标签 javascript angular

我正在开发一个在 ngFor 循环中使用的过滤器,但遇到了一个错误以及另一个问题。

我的管道看起来很简单。我传递一个 id 号参数进行过滤,然后将其与对象属性之一进行比较:

import { Pipe, PipeTransform } from '@angular/core';

@Pipe({
    name: 'groupBy'
})

export class GroupByPipe implements PipeTransform {

    transform(items: any, groupId: number ): any {
        console.log(groupId);
        items.filter(items => items.storyFunnelStatusId === groupId);
    }

}

然后我的模板从上一个循环中获取column.id作为过滤器的参数:

<div class="board-container">
    <div class="board-column" *ngFor="let column of columnNames">
        <div class="board-heading">
            {{ column.name }}
            <span class="count">4</span>
        </div>
        <div id="column-{{ column.id }}" class="card-body">
            <div *ngFor="let item of results | groupBy: column.id">
                <pre>{{ item | json }}</pre>
            </div>
        </div>
    </div>
</div>

两个问题,第一个大问题是我收到控制台错误:ERROR TypeError: Cannot read property 'filter' of undefined

第二个是,当我尝试 console.log('groupId') 时,我得到了 10 个结果,而我应该只得到一个结果。

要把我的头发拔出来:(

最佳答案

ERROR TypeError: Cannot read property 'filter' of undefined 表示您在 GroupByPipe 中的 items 未定义,这意味着您传递了错误参数。

通过修改您的模板即可修复它。

<div class="board-container">
    <div class="board-column" *ngFor="let column of columnNames">
        <div class="board-heading">
            {{ column.name }}
            <span class="count">4</span>
        </div>
        <div id="column-{{ column.id }}" class="card-body">
            <div *ngFor="let item of (results | groupBy: column.id)">
                <pre>{{ item | json }}</pre>
            </div>
        </div>
    </div>
</div>

因为让结果项成为您发送到管道的第一个参数,并且该表达式的值是未定义

<小时/>

同时,您可以在管道的实现中添加一些安全检查,如下所示:

transform(items: [any], groupId: number ): any {
    console.log(groupId);
    if(items instanceof Array) {
        return items.filter(items => items.storyFunnelStatusId === groupId);
    }
    return [];
}

关于javascript - ngfor 中的自定义过滤器管道〜错误 TypeError : Cannot read property 'filter' of undefined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48658729/

相关文章:

angular - 悬停在相应元素上时更改标记颜色 -> Angular 4

javascript - 附加 Img 时 jQuery Img 加载未触发

javascript - 为什么 express-js 不设置 Content-Type header ?

unit-testing - 单元测试没有 ChangeDetectorRef 的提供者

javascript - 从 WebView 中的页面在外部浏览器中打开链接

javascript - TypeScript 中的数据范围

html - Angular 2 - TypeError : Cannot read property 'apply' of undefined

javascript - jQuery 在提交时隐藏表单?

javascript - extjs 数据 View 不显示图像

javascript - 如何阻止 'sign up' 在 JavaScript 中触发 onAuthStateChange?