有没有办法覆盖角度核心库中的角度组件初始化步骤来为每个组件的初始化执行一些代码

Posted

技术标签:

【中文标题】有没有办法覆盖角度核心库中的角度组件初始化步骤来为每个组件的初始化执行一些代码【英文标题】:Is there a way to override the angular component initialization step from the angular core library to execute some code for every component's init 【发布时间】:2021-11-03 05:57:52 【问题描述】:

我有一个在 Angular 版本 8 中开发的 Angular 应用程序,它有 n 个组件。应用程序中所有组件的初始化都需要执行一个通用逻辑。我不想将这个通用逻辑保留在共享服务中,并从所有组件的构造函数或 ngOninit 生命周期挂钩中调用它。原因是我们有不同的开发人员不断向应用程序添加新组件,并且这些新组件也需要执行这个通用逻辑,我的很多时间都花在告诉开发人员这个逻辑上。

有没有办法覆盖 Angular 核心库中的 Angular 组件初始化步骤,以放置我的通用逻辑,以便为每个组件的初始化执行这个通用逻辑,并节省我要求每个开发人员注入我的共享服务并调用的时间它来自他们组件的 ngOninit。

而且这个常见的逻辑并不是很复杂的逻辑。它只是一个简单的 Rest API 调用,将组件的信息注册到一个文件中以用于日志记录。

【问题讨论】:

您是否尝试在基本组件中添加逻辑,因为每个组件都在基本组件之后初始化。一般来说,app.component 是基础组件。 在 app.component 我只能执行一次我的逻辑来注册 app.component。但是我需要这个逻辑来为每个组件执行。 【参考方案1】:

由于您基本上想为每个组件执行这段代码,因此我首先想到的是继承。您可以创建一个基础组件(它是一个类),然后要求您的同行继承/扩展这个特定的基础组件。这样你就不需要向整个团队解释逻辑。如果您要扩展它,此基础组件将充当您创建的所有新组件的合同。

编辑:根据 cmets,我正在添加在 Angular 中使用 AOP 的链接,因为这样我们可以轻松地在现有应用程序中添加不同的日志记录方面。

https://gorillalogic.com/blog/how-to-achieve-aspect-oriented-programming-aop-in-angular-2/

https://jaxenter.com/cross-cutting-concerns-angular-2-typescript-128925.html

【讨论】:

感谢您撰写 Ankush Dutt。但是要实现这一点,我们必须修改应用程序的所有大量现有组件,这将是一项昂贵的操作。我和我的同事过去已经考虑过这个解决方案,但由于需要进行大量更改,我们无法同意实施它。还有其他方法可以放置我的代码吗?有没有什么地方可以写一个监听器来监听组件类之外的组件渲染或初始化? 在这种情况下,AOP 似乎是你最好的选择。使用它,您无需一次又一次地编写代码即可实现这一目标。几天前,我们在现有的 JAVA 应用程序中遇到了类似的问题,但它确实有效。以类似的方式,尝试探索 AOP 在 Angular 中的工作方式。希望这会有所帮助! 感谢您提供此信息 Ankush。你有没有在 Angular 8 或更高版本中实现 AOP 的示例。 我已经用 Angular2 的相关链接编辑了我的答案。这应该适用于 Angular 8 以及微小的变化。如果有帮助,请采纳答案。

以上是关于有没有办法覆盖角度核心库中的角度组件初始化步骤来为每个组件的初始化执行一些代码的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法让我的组件在角度上完全可重用?

如何以角度覆盖现有组件?

有没有办法在角度上实现两步路由?

当我进入另一个组件(角度2/4/5)的主题调用的订阅方法时,为什么我在控制台中看不到我的根变量组件?

有没有办法用 ng new 命令指定角度版本

如何在组件中切换角度材质 sidenav