与 Constructor 和 ngOnInit 之间的差异相关但不相同。
在 Angular 16 和 17 中,我们现在可以使用takeUntilDestroyed运算符和信号。这两种方法似乎在注入器上下文中效果最好,或者至少具有不需要传递其中一种的优点。
所以问题是(再次)我们应该将初始化放在构造函数(或成员字段)中还是仍然使用OnInit?其次,使用构造函数而不是有任何陷阱吗OnInit?
注意:对于初始化,我的意思是使用httpClient来获取数据以显示在页面上。使用数据映射等设置 RxJS 管道。读取路由参数等。
搁置以下内容:
OnInitorOnChanges@Input()根据旧的 Angular.io 站点的组件生命周期文档:
组件的构造应该便宜且安全。例如,您不应该在组件构造函数中获取数据。您不必担心新组件在测试中创建时或在您决定显示它之前会尝试联系远程服务器。ngOnInit() 是组件获取其初始数据的好地方。
但新的 Angular.dev 站点中不存在此文档。
他们的新教程之一也在构造函数中进行了数据调用:
constructor() {
this.housingService.getAllHousingLocations().then((housingLocationList: HousingLocation[]) => {
this.housingLocationList = housingLocationList;
this.filteredLocationList = housingLocationList;
});
}
Run Code Online (Sandbox Code Playgroud)
Angular 16/17 似乎正朝着在注入上下文(成员字段或构造函数)中完成更多初始化的方向发展。这对性能、稳定性、未来发展有影响吗?