I have a component bar inside ngFor. I want to update its width with animation, from the previous value to the new one.
html:
<div *ngFor="let station of stations" class="station"> <bar [perc]="station.perc" class="bar"></bar> </div>
ParentComponent:
ngOnInit(){ setInterval(() => this.updateData(), 10000); } updateData(){ const url = 'http://....'; this.http.get(url) .map(res => res.json()) .subscribe(data => { this.stations = data; }); }
Barcomponent
export class BarComponent { @Input() perc; constructor(private element: ElementRef){} ngOnChanges(changes: any): void { let perc = changes.perc.currentValue; TweenMax.to(this.element.nativeElement, 1, { width: perc + '%' }); } }
But on each updateData (), it looks like ngFor to recreate the dom and the BarComponent is created again. Therefore, even if "station.perc" matches, ngOnChanges () is triggered.
And the transition continues restarting from 0 instead of starting from the previous value ...
I probably missed an important point here, but what is a workaround?
sebap source share