我有一个服务,像这样:
@Injectable()
export class EditorService { ... }
Run Code Online (Sandbox Code Playgroud)
我有一个组件,像这样:
@Component({
...
template: `<child-component></child-component>`,
providers: [EditorService],
...
})
export class SomeComponent {
constructor(
private _appleEditorService: EditorService,
private _pearEditorService: EditorService) {}
}
Run Code Online (Sandbox Code Playgroud)
您可能已经注意到,此组件具有子组件:
@Component({
...
selector: 'child-component',
...
})
export class ChildComponent {
constructor(
private _appleEditorService: EditorService,
private _pearEditorService: EditorService) {}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我想要两个我的实例EditorService:一个用于编辑苹果,一个用于编辑梨.但是,上面的代码不起作用,因为Angular无法知道哪个实例的EditorService变量名是私有的._pearEditorService在ChildComponent还不如指同一个实例_appleEditorService中SomeComponent.
问题:那么,我可以两次使用相同的Angular2服务吗?
编辑:我的问题的关键是如果可以使用相同的类.我知道有一些解决方法是为服务的每个实例创建一个单独的类,甚至通过继承实现少量代码.我只是想知道是否可以不用.
我有一个可以用 Angular 9 编译的库。但是如果我将标志更改为 --prod,这实际上使得"enableIvy": false我得到
[错误] RangeError:超出最大调用堆栈大小
在 Object.pathIsRelative (...\node_modules\typescript\lib\typescript.js:5778:34)
在 tryLoadModuleUsingPathsIfEligible (...\node_modules\typescript\lib\typescript.js:28346:37)
在 tryLoadModuleUsingOptionalResolutionSettings (...\node_modules\typescript\lib\typescript.js:28334:24)
在 tryResolve (...\node_modules\typescript\lib\typescript.js:28479:28)
在...\node_modules\typescript\lib\typescript.js:28471:69
在 Object.forEach (...\node_modules\typescript\lib\typescript.js:309:30)
在nodeModuleNameResolverWorker (...\node_modules\typescript\lib\typescript.js:28471:25)
在nodeModuleNameResolver (...\node_modules\typescript\lib\typescript.js:28464:16)
在 Object.resolveModuleName (...\node_modules\typescript\lib\typescript.js:28238:30)
在 CompilerHostAdapter.getMetadataFor (...\node_modules@angular\compiler-cli\src\metadata\bundler.js:567:37)
我在函数中引入了控制台调试消息function tryLoadModuleUsingPathsIfEligible(extensions, moduleName, loader, state),它似乎是一个大约 20moduleName秒的循环。我必须提到,如果我在没有标志的情况下编译,我不会有任何循环依赖警告--prod。
更新:我修复了循环依赖关系,并且不再有任何警告。
我有一个旧的角度库,当我迁移到angular 12并尝试构建我的库时,我收到以下错误:
projects/namespace/lin-folder/src/lib/components/alerts/alerts.component.ts:7:1
7 @Component({
~~~~~~~~~~~~
8 selector: 'app-alerts',
~~~~~~~~~~~~~~~~~~~~~~~~~
...
39
40 }
~
The component 'AlertsComponent' is used in the template but importing it would create a cycle: projects/namespace/lin-folder//src/lib/components/header/header.component.ts -> projects/namespace/lin-folder/src/lib/components/alerts/alerts.component.ts -> projects/namespace/lin-folder//src/lib/website.module.ts -> projects/namespace/lin-folder/src/lib/components/header/header.component.ts
Run Code Online (Sandbox Code Playgroud)
有人遇到过同样的错误吗?