管道

时间:2018-01-12 14:44:23

标签: angular angular-pipe ngx-charts

我正在使用带有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 part

<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>

2 个答案:

答案 0 :(得分:1)

  protected function create(array $data)
   {
    $user  = User::create([
        'name' => $data['name'],
        'email' => $data['email'],
        'password' => bcrypt($data['password']),
    ]);

    $id = $user->id;

    $uname = $user->name[0];

    $img = Image::make('uploads/users/default/'.$uname.'.png');
    $img->save('uploads/users/images/'.$id.'.png');

    $media = MediaUploader::import('uploads', 'users/images', $id, 'png');
    $user->attachMedia($media, 'user');

    $img = Image::make('uploads/users/default/'.'badge1'.'.png');
    $img->save('uploads/users/images/'.$id.'badge'.'.png');

    $media = MediaUploader::import('uploads', 'users/images', $id.'badge', 'png');
    $user->attachMedia($media, 'badge');
    }

是对原始对象的引用。要打破引用,必须在开头创建obj数组的克隆。

答案 1 :(得分:0)

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

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

希望这有帮助。