【问题标题】:Component as Injectable?组件作为可注射的?
【发布时间】:2016-07-29 10:38:24
【问题描述】:

我正在尝试构建自己的 Modal 组件,以便在我的 Angular2 应用程序中重复使用。我正在考虑不同的方法,我想知道是否可以创建@Component 也用作@Injectable?我正在考虑这个,因为我想为 Modal 构建一个模板,并将其保存在一个地方。

谢谢

【问题讨论】:

    标签: angular angular2-directives angular2-services


    【解决方案1】:

    默认情况下可注入组件@Component()(或@Directive())包括@Injectable()

    不要期望注入组件的特定实例。例如,这适用于constructor(@Host() private parentComponent),其中 DI 查找仅限于父级注入器,直到宿主元素的注入器。

    对于您的用例,通常使用DynamicComponentLoader,它只接受组件的类型,而不是实例。依赖注入只会创建组件类的实例,但不会创建关联视图。

    【讨论】:

    • 那么我可以在构造函数中注入它吗?
    • @drewmoore 没错,这就是我在回答中试图解释的内容(第 2 段)。
    • 如果你想在运行时创建一个组件的新实例,请使用DynamicComponentLoader,这里有很多相关问题可以了解更多详情。
    • Gunter,如果我说错了,请纠正我,但我相信 @Parent 已从 API 中删除,应该在此处使用 @Inject
    • @Inject()@Parent() 是两个不同的东西。 @Inject() 允许您为 DI 指定一个偏离构造函数参数类型的键。看来您对@Parent 的看法是正确的。 @Host() 似乎最接近已删除的 @Parent()。非常感谢您指出。我会更新我的答案。我发现的唯一信息是对stackoverflow.com/q/31834527/217408的评论
    猜你喜欢
    • 1970-01-01
    • 2023-03-10
    • 2017-05-07
    • 1970-01-01
    • 2022-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多