我有一个" Angular2"组件" ItemBoard"这是" Item"的容器。组件。我需要先通过远程服务获取购物车数据,然后用它来创建商品。我想知道ItemBoard中的哪个生命周期方法应该用于此操作?
ngOnChanges()
ngOnInit()
ngDoCheck()
@Component(selector: '[itemBoard]', templateUrl: "itemBoard.html", directives: const [Item], viewProviders: const [CartService])
class ItemBoard {
List cartItems= [];
ItemBoard(){}
}
@Component(selector: '[item]', templateUrl: "item.html", directives: const [Item])
class ItemBoard {
@Input() List cartItems;
}
答案 0 :(得分:1)
如果您只是更改绑定ngFor
,ngIf
,ngSwitch
,[prop]="field"
使用的数据,那么您不必关心生命周期钩子。只需更新数据,Angular就可以完成剩下的工作。
如果在Angular创建绑定之前更新数据,Angular甚至不会注意到其他更改检测负责更新视图。
为避免重复工作,请尽可能早地进行更新,并且只在必要时进行更新。
如果有重复更新,收集更新并立即更新Angular与收集的更改绑定的字段可能会有所帮助。
通过将默认更改检测策略更改为onPush
,然后在" all"时通知Angular,可以简化此策略。更改已应用,并且是Angular更新视图的时间(Triggering Angular2 change detection manually)。
如果您使用ElementRef
或类似内容修改DOM,则ngAfterViewInit()
是正确的生命周期挂钩https://angular.io/docs/ts/latest/api/core/AfterViewInit-interface.html
让Angular完成视图创建,然后添加自定义。