【发布时间】:2018-02-08 17:29:09
【问题描述】:
我在组件的 HTML 部分中使用了一个自定义管道。它在模块中声明:
declarations: [ I18nPipe ],
我希望能够从组件代码中调用它的方法(不是transform 方法)。
我希望管道实例存在于依赖注入上下文中的某个位置,以便我可以抓住它。但是我错了。如果我将它注入到组件的构造函数中(例如任何普通服务):
constructor(private i18nPipe: I18nPipe)
然后我得到一个错误:没有提供者。所以我将它包含在同一模块的providers 部分:
providers: [ I18nPipe ]
然后我将可以在组件代码中访问它,但我的自定义管道会有 两个 实例。
由
providers创建,在 DI 上下文中可用。在构造函数中注入时我会得到这个实例,所以我将在我的组件代码中使用这个实例。在 HTML 中使用的实例。它在哪里生活?我想在我的组件代码中访问这个实例,而不是“提供”的那个;如何获得?
【问题讨论】:
-
声明在模板中可用,提供者通过 DI。为什么它们是单独的实例很重要?如果管道有状态,最好将它移到别处。除了变换还有什么方法?需要更多上下文才能给出有用的答案。
-
我有一种方法可以尝试配置一点管道。而不是输入参数(需要出现在 html 模板中的所有管道外观中),我想尝试从代码中设置配置参数。例如设置语言。当然,保持状态并注入管道的服务会更干净,我只是尝试缩短它,看看是否可能。并发现了这一点——这是我没有预料到的。无论如何:组件也存在于声明和 DI 树中。为什么管道不行?一般来说是为了更好地理解角度。
-
“组件也出现在声明和 DI 树中” - 我认为您也不能注入组件或指令。跨度>
-
考虑使用服务代替您的配置信息。然后任何所需的组件或您的管道都可以引用该服务。
标签: angular angular2-di angular2-custom-pipes