我想在初始化时向根目录中提供的所有服务添加自定义行为。我已经有一个装饰器了,但是我希望当类与@Injectable
装饰器一起使用时,它总是被应用。
这可能吗?我尚未找到任何相关信息,当然也不想编辑节点模块。
PD:我正在使用Angular 8
答案 0 :(得分:1)
从技术上讲这是可能的,但我不推荐。
1。)装饰器在TypeScript中是实验性的,您必须在tsconfig.json
中使用道具"experimentalDecorators": true
摘自官方TypeScript documentation:
注意装饰器是一项实验功能,在将来的版本中可能会发生变化。
2。)这就是为什么Angular团队在编译时使用所谓的TypeScript变形器来删除它们的原因,并且如果装饰器从不脱离“实验”状态或更糟的情况下被删除,则是安全的。使用TypeScript变形金刚,可以在编译时更改书面源的AST(抽象语法树)。 Here是这些内置变压器的很好概述。
当然,您可以构建“自定义” TypeScript转换器,但我不建议您这样做,因为它涉及很多试验和错误。但是那里有博客文章。我不会链接它们;)
3。)一次Maxim did write a custom @Component
装饰器,但我认为它不能满足您的需求。
摘要
所以我提议的所有解决方案都是:
...如果不可能所有这些方法,我将开始考虑自定义装饰器。将额外的魔术隐藏在给定的装饰器后面是不可取的,因为没人会在那里期望它,并且这会带来麻烦。但那只是我的个人意见。如上所指出:除非编写转换器,否则即使自定义装饰器也将基于实验功能构建。因此,如果我选择避免它们,我会坚持下去的。