Angular-服务不会从自定义库导出到使用者项目
我构建了一个angular库,它有两种类型的服务(以及组件/模块)Angular-服务不会从自定义库导出到使用者项目,angular,typescript,webpack,gulp,Angular,Typescript,Webpack,Gulp,我构建了一个angular库,它有两种类型的服务(以及组件/模块) 库专用的服务,用于消费者项目不可用的内部功能(我们称之为内部) 应用于在库的组件/模块和消费者项目之间移动数据的服务。(我们称之为外部) 这两种情况都有点问题,因此它们各有一个部分。 抱歉发了这么长的邮件 注意:每个库组件也是一个模块,以便有选择地导入所需内容,而不是整个库 内部服务 它们与模块一起使用forRoot()方法打包,如下所示: export class TestModule { static forRo
- 库专用的服务,用于消费者项目不可用的内部功能(我们称之为内部)
- 应用于在库的组件/模块和消费者项目之间移动数据的服务。(我们称之为外部)
注意:每个库组件也是一个模块,以便有选择地导入所需内容,而不是整个库
内部服务 它们与模块一起使用
forRoot()
方法打包,如下所示:
export class TestModule {
static forRoot(): ModuleWithProviders {
return {
ngModule: TestModule,
providers: [ TestService ]
}
}
}
然后在消费者项目app.module
使用了TestModule.forRoot()
这里一切正常。
奇怪的是,当我使用TestModule
中打包的组件的选择器作为视图子级时,我可以从外部访问私有属性。
以下是一些片段,以更清楚地说明发生了什么:
@ViewChild('testViewChild')testViewChild代码>
this.testViewChild.testService.myTestValue='我是在测试项目中设置的'
最后一个代码段来自TestModule中导出的中TestComponent的typescript文件
constructor(private testService: TestService) {
this.testService.myTestValue = 'I was set in the library';
}
实际服务myTestValue=='I是在测试项目中设置的'
有人知道为什么会这样吗强>
对外服务
这里的情况更奇怪。该库最初创建时与gulp
捆绑在一起,但后来切换到webpack
。如果我对所有事情都了如指掌,那么gulp必须通过消费者项目的app.module
提供库中定义的服务,然后库和消费者项目组件都使用这个全局服务实例
切换到webpack
后,这些服务无法实例化,引发了一个关于服务没有提供程序的错误,并且尽管已导出(在index.ts
中),但无法使用从“测试库”导入消费者应用程序模块
。解决方法是设置路径,如“../../node_modules/test library/…”
。但这只会遇到更多的问题
通过在库中使用提供者,不能从消费者项目访问服务实例(除非上面的hack感觉完全错误)
有什么想法吗?
再一次为冗长的帖子感到抱歉。
为了更好更具描述性的标题,请随意编辑 找到了一个解决方案?对我想的一些问题。已经有一段时间了。如果你有类似的问题,请在这里添加你的问题,我可能会提供帮助