我正在使用带有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>
答案 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
希望这有帮助。