在Angular服务构造函数中调用HTTP端点是否可以?

时间:2018-05-04 13:53:34

标签: angular

Angular documentation中,关于组件构造函数中的代码有以下提示(我强调的第二段):

  

ngOnInit

中调用它      

虽然您可以在构造函数中调用getHeroes(),但这不是最佳做法。

     

保留构造函数以进行简单的初始化,例如布线   属性的构造函数参数。构造函数不应该这样做   任何东西。它当然不应该调用一个产生HTTP的函数   作为真实数据服务的远程服务器请求。

     

相反,请在ngOnInit lifecycle hook内拨打getHeroes()并让   在构建之后的适当时间的角度调用ngOnInit   HeroesComponent实例。

服务怎么样?在构造函数中进行HTTP调用(只是在本地存储Observable的异步请求的启动)也是不好的吗?服务没有ngOnInit()事件,那么服务的最佳做法是什么?

1 个答案:

答案 0 :(得分:2)

我打赌你可以找到一些例子,说明构造函数可以在什么地方使用而没有任何伤害,但作为经验法则和最佳实践使用"角度构造函数"因为它又名ngOnInit生命周期钩子。

有时使用构造函数是不可能的或需要额外的工作。例如,您需要使用服务从后端获取数据,因为如果@Input()数据。在javascript对象构造期间,输入不受约束,但它们在ngOnInit

中可用

此外,如果您想对您的组件/服务进行单元测试怎么办?您为每个测试创建新实例(从而调用构造函数),并且您正在对模拟的http后端进行额外调用,甚至更糟糕的是 - 为了实现一个。