首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >角度2:“全球”生命周期挂钩?

角度2:“全球”生命周期挂钩?
EN

Stack Overflow用户
提问于 2016-09-09 21:55:54
回答 1查看 1.9K关注 0票数 6

TL;博士

我们正在构建一个带有角2的应用程序,并希望注册一个“全局”的ngOnInitngOnDestroy函数。使用“全局”,我的意思是为每个组件执行函数,而不需要为每个组件显式地实现函数。这个是可能的吗?

详细

我们的一些组件(但不是所有组件)一旦加载(例如ngOnInit),就需要在全局服务中注册一些东西,并在卸载(例如ngOnDestroy)之后重新注销它。以下是我能想到的两种方法:

  • 在每个需要这样做的组件中实现这个逻辑(在ngOnInitngOnDestroy中)。
  • 在基类中实现此逻辑,基类调用由指定哪些需要注册/未注册的子类实现的抽象方法。

这两种方法都不太令人满意:

  • 首先,我需要一次又一次地实现整个逻辑。是的,我知道,我可以把“锅炉板”-code放在一个助手类或什么的。但它似乎有点含蓄,“隐藏”在正常的角度生命周期。有一个可说话的名称(例如接口/基类)似乎更明确。
  • 在第二个类中,所有类都需要扩展相同的公共基类。但是,如果它们还应该扩展其他一些基类(多重继承),怎么办?

这就是为什么我想出了以下的想法:

为什么不将上面提到的抽象类替换为可以由所有所需组件实现的接口。然后,我将注册一个全局函数,该函数在所有组件的每个ngOnInitngOnDestroy上执行(如果可能的话--例如在模块、路由等中)。在函数中,我将检查组件是否实现了接口,如果实现了,则调用适当的函数来获得要注册的特定类型的内容。

我的问题

  • 角2能做到这一点吗?也就是说,“全局生命周期挂钩”(或类似的东西)是否可以注册?
  • 或者这是一个完全错误的方法?
  • 还有其他/更好的主意吗?
EN

回答 1

Stack Overflow用户

发布于 2016-09-10 03:41:59

强制整个应用程序的行为将不是一个好主意,这也会影响第三方组件以及初学者。

样板代码可以移动到具体的基类中。有用于JS/TS多重继承的解决方案,例如@mixin,也请参阅TypeScript指南

由于基类方法是固定的,所以类mixin可以表示为简化的修饰器:

代码语言:javascript
复制
class CustomLifecycle implements OnInit, OnDestroy  {
  constructor(
    public originalNgOnInit: Function,
    public originalNgOnDestroy: Function
  ) {}

  ngOnInit() {
    ...
    if (typeof this.originalNgOnInit === 'function') {
      this.originalNgOnInit();
    }
  }

  ngOnDestroy() {
    ...
    if (typeof this.originalNgOnDestroy === 'function') {
      this.originalNgOnDestroy ();
    }
  }
}

function Lifecycled() {
  return function (target: Function) {
    const customLifecycle = new CustomLifecycle(
      target.prototype.ngOnInit,
      target.prototype.ngOnDestroy
    );

    target.prototype.ngOnInit = customLifecycle.ngOnInit;
    target.prototype.ngOnDestroy = customLifecycle.ngOnDestroy;
  }
}

而且它可以像

代码语言:javascript
复制
@Component({ ... })
@Lifecycled()
class SomeComponent { .... }

实现仅限于ngOnInit等原型方法,箭头成员需要对构造函数进行修补。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39420241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档