我目前将@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