Angular 2 – 使用ngFor,是否可以在不重建dom的情况下更新值?
发布时间:2020-12-17 07:49:22 所属栏目:安全 来源:网络整理
导读:我在ngFor中有一个组件’bar’.我想用从前一个值到新值的动画更新其宽度. HTML: div *ngFor="let station of stations" class="station" bar [perc]="station.perc" class="bar"/bar/div ParentComponent: ngOnInit(){ setInterval(() = this.updateData()
我在ngFor中有一个组件’bar’.我想用从前一个值到新值的动画更新其宽度.
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 + '%' }); } } 但是在每个updateData()上,它看起来像ngFor重新创建dom并再次构造BarComponent.因此,即使’station.perc’相同,也会触发ngOnChanges(). 并且转换从0开始重新开始,而不是从之前的值开始… 我可能错过了一个关键点,但是干净的解决方法是什么?
我想你应该使用trackBy选项来定制ngFor指令的默认跟踪算法:
视图 <div *ngFor="let station of stations; let i = index; trackBy: trackByFn" class="station"> <bar [perc]="station.perc" class="bar"></bar> </div> 零件 trackByFn(index,item) { return index; } 或者更好地使用唯一ID: trackByFn(index,station) { return station.id; } 在这里查看有关trackBy的更多详细信息: > https://angular.io/guide/template-syntax#ngfor-with-trackby 希望Plunker Example也会帮到你. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- Angularjs,如何使用ng-repeat范围5到10
- 《数据结构》第一章 绪论 教学设计
- docker-无法在etcd3中找到Kubernetes apiserver的数据
- scala:为什么下划线(_)初始化对于字段而不是方法变量?
- scala – 用于MongoDB的Casbah&Rogue – 查询功能
- angularjs – Google商家信息自动填充未显示
- vim编辑器最实用的技巧(入门专用,持续updating20170818)
- twitter-bootstrap-3 – 内部模态中的Bootstrap选择无法正确
- centos 里postfix + dovecot配置文件实例
- 解析 – 在shell脚本中解析url