组件ngOnInit

时间:2018-08-19 17:18:21

标签: angular5 angular6 subscription subject ngoninit

我正在学习Angular 5+,最近进入主题/订阅部分,我看到许多教程都希望以某种方式使用订阅:

  1. 在组件中声明订阅
  2. 通过服务的主题或ngrx / store在ngOnInit中订阅
  3. 在ngOnDestroy中取消订阅

但是,我不确定我们是否必须订阅/取消订阅ngOnInit和ngOnDestroy 中组件中的每个订阅。例如,如果我的订阅将通过按钮单击事件进行更新,那么我应该在组件中订阅哪个计划?

  1. 仅ngOnInit
  2. 仅按钮点击事件
  3. ngOnInit和按钮单击事件两者

为什么我们总是在ngOnInit中订阅一个订阅? ngOnInit就像页面生命周期中的Page_Load一样,因此它只会在第一次被调用一次,如果每次订阅都被调用一次更新后,会否一再触发ngOnInit?如果是这样,在大型应用程序中,是否会一遍又一遍地加载我的组件,这会导致性能问题?

1 个答案:

答案 0 :(得分:1)

通常您将Observables放在Service内部进行订阅,并通过getter和setter使其可用。

订阅Observable时,其行为类似于EventListener。只要Observable中的对象发生更改,就会触发一个Event并执行您预订中的代码。此外,还提供了更新的对象。

即使您在ngOnInit中初始化订阅,也不会导致更新到达时重新加载整个组件。订阅中只有那些由您的代码更新的部分。

您不必在ngOnInit()内放置订阅。这取决于您要在组件中实现的目标。但是大多数时候,您想在访问组件时直接加载和显示数据,并在数据更改时更新UI。这就是为什么将订阅放入ngOnInit()的好习惯。