以编程方式创建Angular分层注射器

时间:2019-02-18 15:31:16

标签: angular dependency-injection hierarchical

我目前将@Directive与一组提供程序一起使用,以为没有该组件的任何组件创建一组隔离的可注入服务/值。

@Directive({
  selector: '[my-isolated-directive]',
  providers: [MyHierarchicalService]
})
export class MyIsolatedDirective {}
<ng-container my-isolated-directive>
  <component-that-interacts-with-isolation></..>
  <component-that-requires-isolation></...>
</ng-container>

这很好用,但是需要我在视图中引入一组新代码,除了使用该服务打开一个新的分层注入器外,它毫无关系。

我的问题:是否可以在没有指令帮助的情况下以编程方式执行此操作?我知道可以使用Injector.create([MyHierarchicalService], parent)手动创建注入器,但是我可以将此注入器本地用于子组件吗?

仅将providers: [MyHierarchicalService]移到<component-that-requires-isolation>组件中是不可行的,因为隔离中的多个组件将需要相同的服务。可以看作是分层注射器中的“开放空间”,在它下面,所有组件共享相同的服务。

我当前解决方案的示例简化了堆叠闪电战: https://stackblitz.com/edit/angular-zqxn4f

对我的孤立空格感兴趣的实际指令: https://github.com/opf/openproject/pull/7042/files#diff-22f5fc2b9b761e556ed425d5e8b93fb4R70

使用指令解决方案的实际代码: https://github.com/opf/openproject/pull/7042/files#diff-09e0b8f2cf13d8ecc8ccc45872068580R7

0 个答案:

没有答案