Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular-服务不会从自定义库导出到使用者项目_Angular_Typescript_Webpack_Gulp - Fatal编程技术网

Angular-服务不会从自定义库导出到使用者项目

Angular-服务不会从自定义库导出到使用者项目,angular,typescript,webpack,gulp,Angular,Typescript,Webpack,Gulp,我构建了一个angular库,它有两种类型的服务(以及组件/模块) 库专用的服务,用于消费者项目不可用的内部功能(我们称之为内部) 应用于在库的组件/模块和消费者项目之间移动数据的服务。(我们称之为外部) 这两种情况都有点问题,因此它们各有一个部分。 抱歉发了这么长的邮件 注意:每个库组件也是一个模块,以便有选择地导入所需内容,而不是整个库 内部服务 它们与模块一起使用forRoot()方法打包,如下所示: export class TestModule { static forRo

我构建了一个angular库,它有两种类型的服务(以及组件/模块)

  • 库专用的服务,用于消费者项目不可用的内部功能(我们称之为内部

  • 应用于在库的组件/模块和消费者项目之间移动数据的服务。(我们称之为外部

这两种情况都有点问题,因此它们各有一个部分。 抱歉发了这么长的邮件


注意:每个库组件也是一个模块,以便有选择地导入所需内容,而不是整个库


内部服务 它们与模块一起使用
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感觉完全错误)

有什么想法吗? 再一次为冗长的帖子感到抱歉。
为了更好更具描述性的标题,请随意编辑

找到了一个解决方案?对我想的一些问题。已经有一段时间了。如果你有类似的问题,请在这里添加你的问题,我可能会提供帮助