6

我正在使用带有 ngx-charts 数据数组的过滤器管道。数据按 2 个日期过滤:fromDate 和 toDate。使用使数组更小的日期进行过滤时,管道工作正常,但是当我首先使用较小的日期范围进行过滤,然后再次使范围变大时,管道不适用于原始数组,但适用于已过滤的数组。

我已经做过其他点子,但从未遇到过这个问题,我不确定这里出了什么问题。也许你们中的某个人可以帮助我。

管道:

export class DateInRangePipe implements PipeTransform {
    transform(obj: any[], from: Date, to: Date): any[] {
        if (obj && from && to) {
            obj.forEach(data => {
                data.series = data.series.filter((item: any) => {
                    return this.inRange(item.name, from, to);
                });
            });
        }
        return [...obj];
    }

    inRange(date: Date, from: Date, to: Date): boolean {
        return date.getTime() >= from.getTime() &&
            date.getTime() <= to.getTime() ? true : false;
    }
}

Chart.component.html 部分

<ngx-charts-line-chart
    [view]="view"
    [scheme]="colorScheme"
    [results]="multi | dateinrangePipe: from: to"
    [gradient]="gradient"
    [xAxis]="showXAxis"
    [yAxis]="showYAxis"
    [legend]="showLegend"
    [showXAxisLabel]="showXAxisLabel"
    [showYAxisLabel]="showYAxisLabel"
    [xAxisLabel]="xAxisLabel"
    [yAxisLabel]="yAxisLabel"
    [autoScale]="autoScale"
    (select)="onSelect($event)">
</ngx-charts-line-chart>
4

2 回答 2

1
`data.series = data.series.filter...` 

是对原始对象的引用。要中断引用,必须在开始时创建 obj 数组的克隆。

于 2018-01-19T11:11:03.147 回答
0

如果输入没有改变,纯管道不会重新计算它的值......所以即使参数改变它也不会重新计算。

有一个 StackOverflow 问题反映了这一点。最常见的解决方案是将管道纯度更改为 false并将主机组件设置为ChangeDetectionStrategy.OnPush。但是还有更多的解决方案。查看此链接:管道变化检测

希望这可以帮助。

于 2018-01-15T14:18:01.783 回答