在Angular documentation中,关于组件构造函数中的代码有以下提示(我强调的第二段):
在
中调用它ngOnInit
虽然您可以在构造函数中调用
getHeroes()
,但这不是最佳做法。保留构造函数以进行简单的初始化,例如布线 属性的构造函数参数。构造函数不应该这样做 任何东西。它当然不应该调用一个产生HTTP的函数 作为真实数据服务的远程服务器请求。
相反,请在
ngOnInit
lifecycle hook内拨打getHeroes()
并让 在构建之后的适当时间的角度调用ngOnInit
HeroesComponent实例。
服务怎么样?在构造函数中进行HTTP调用(只是在本地存储Observable
的异步请求的启动)也是不好的吗?服务没有ngOnInit()
事件,那么服务的最佳做法是什么?
答案 0 :(得分:2)
我打赌你可以找到一些例子,说明构造函数可以在什么地方使用而没有任何伤害,但作为经验法则和最佳实践使用"角度构造函数"因为它又名ngOnInit
生命周期钩子。
有时使用构造函数是不可能的或需要额外的工作。例如,您需要使用服务从后端获取数据,因为如果@Input()
数据。在javascript对象构造期间,输入不受约束,但它们在ngOnInit
此外,如果您想对您的组件/服务进行单元测试怎么办?您为每个测试创建新实例(从而调用构造函数),并且您正在对模拟的http后端进行额外调用,甚至更糟糕的是 - 为了实现一个。