相关疑难解决方法(0)

使用相同服务的多个实例

我有一个服务,像这样:

@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变量名是私有的._pearEditorServiceChildComponent还不如指同一个实例_appleEditorServiceSomeComponent.

问题:那么,我可以两次使用相同的Angular2服务吗?

编辑:我的问题的关键是如果可以使用相同的类.我知道有一些解决方法是为服务的每个实例创建一个单独的类,甚至通过继承实现少量代码.我只是想知道是否可以不用.

angular2-services angular

22
推荐指数
1
解决办法
2万
查看次数

Angular 9 ng build --prod 中的“超出了最大调用堆栈大小”

我有一个可以用 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

更新:我修复了循环依赖关系,并且不再有任何警告。

typescript angular ng-packagr

12
推荐指数
2
解决办法
2万
查看次数

需要创建一个或多个导入周期来编译该组件,当前编译器配置不支持这一点

我有一个旧的角度库,当我迁移到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)

有人遇到过同样的错误吗?

angular angular-library angular12

8
推荐指数
1
解决办法
1万
查看次数