angular - 以编程方式创建 Angular 分层注入器
问题描述
我目前使用@Directive
带有一组提供程序的 a 来为没有它的任何组件创建一组隔离的可注入服务/值。
@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>
因为该隔离内的多个组件将需要相同的服务。它可以看作是在分层注入器中“打开一个空间”,在它下面,所有组件共享相同的服务。
使用我当前的解决方案简化 stackblitz 示例: 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
解决方案
推荐阅读
- python - 在python中赋值之前引用的错误
- javascript - 如何检查我的 JSON 字段是否已定义?
- java - 如果有很多二级字段,如何解析嵌套的 json 文件?
- android - 将密钥文件放入 APK
- python - PermissionError 试图从 MacOS 上的 Python 访问桌面(shutil 或 os.chdir())
- php - 在 PHP 中从 XML 数据生成图像
- websocket - 用于聊天应用的 GRPC 流式传输或 WebSockets
- python - 遍历 XML 并选择特定的元素树内容
- java - 帐户设置适配器问题
- influxdb - 使用 Flux 查询时,不同的保留策略 (RP) 是否表现得像表?