【问题标题】:Modify existing Angular function from angular/core package从 angular/core 包修改现有的 Angular 函数
【发布时间】:2017-08-16 14:31:35
【问题描述】:

我想知道是否可以从 angular/core 包中修补现有函数,以便始终使用更改后的函数而不是原始函数。为了澄清我没有直接调用上述函数,而是由 angular 本身调用。

更具体地说,我想对此function 进行更改,但不提出拉取请求或分叉角度。为了简单起见,假设我想将 console.log('changed') 添加到所述函数的末尾,而不更改任何其他内容。

【问题讨论】:

  • 我不太确定这是否允许,它是一个框架而不是一个库

标签: javascript angular typescript monkeypatching


【解决方案1】:

我建议不要修改现有包中的函数。取而代之的是:1) 编写您自己的函数来包装现有函数,或 2) 将现有函数复制粘贴到您自己的代码中,然后在那里进行修改。

【讨论】:

  • 感谢您的回复。这两个选项中的任何一个是否会导致“原始”功能在角度包中被修改后的功能替换?澄清一下,我希望调用所述函数的 Angular 的其他部分调用我的修改版本。
  • 也许我们太注重细节了。你在这里的真正目标是什么?你想完成什么?
【解决方案2】:

建议不要修改 Angular 的内部函数,因为你不知道 Angular 内部在哪里使用该函数,并且在团队工作时很难管理内部函数的变化。如果您想更改应用程序的功能,请根据您的使用扩展该类或实现接口。

【讨论】:

  • 我知道不建议这样做,但仍有可能吗?我没有在我的应用程序中直接使用所述函数,而是 Angular 本身在更改检测期间使用它。
  • 是的,您可以在节点模块的 src 文件夹中更改该功能,但之后您必须在不同开发人员之间管理节点模块的相同副本。如果多解释一下您要更改的功能或要实现的功能,那么我可以更详细地解释
  • 据我所知,angular 的源代码不在 node_modules 中,只有 .d.ts 声明文件,所以这是不可能的。我链接到原始帖子中的函数,为了简单起见,假设我想将 console.log('test') 添加到所述函数中。
【解决方案3】:

您可以通过从源模块导入来extend 现有的 Angular 核心类或接口。但是您不能修改或覆盖从源模块导出的函数。

您可以创建一个如下所示的类并将其导出。然后在类中,您可以创建一个调用原始导入的角度函数的包装函数。

export class ExampleClass{

  // create your wrapper function here
}

然后在您希望调用函数而不是直接调用角度函数的页面中,像下面这样导入您的类

import {ExampleClass} from <your ts file>

然后您可以在该页面中调用您的自定义方法。

【讨论】:

  • 那么你的意思是,基本上不可能做我想做的事?
  • 关于您所做的编辑,我没有直接从我的应用程序调用该函数。相反,在变化检测期间,角度本身会调用所述函数。
  • 那么这样做风险很大,因为整个变更检测都是由 angular core 处理的。
  • 我很清楚这很危险,但有可能吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-29
  • 1970-01-01
  • 1970-01-01
  • 2021-08-07
  • 2018-10-18
  • 1970-01-01
  • 2018-06-02
相关资源
最近更新 更多