Angular 在组件 ngOnInit 中订阅

Angular Subscription in component ngOnInit

我正在学习 Angular 5+,最近来到 subject/subscription 部分,我看到很多教程想以某种方式使用订阅:

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

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

  1. 只有 ngOnInit
  2. 只有按钮点击事件
  3. ngOnInit 和按钮点击事件

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

您通常将要订阅的 Observable 放入服务中,并通过 getter 和 setter 使它们可用。

当订阅 Observable 时,它​​的行为在某种程度上类似于 EventListener。每当 Observable 中的对象发生变化时,就会触发一个事件,并执行订阅中的代码。此外,您将获得更新的对象。

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

您不必在 ngOnInit() 中进行订阅。这取决于你想在组件中实现什么。但大多数情况下,您希望在访问组件时直接加载和显示数据,并在数据更改时更新 UI。这就是为什么最好将订阅放在 ngOnInit() 中的原因。