如何在Angular库中从public_api.ts隐藏服务

时间:2019-06-10 22:16:44

标签: angular typescript angular-library

我希望创建一个共享的Angular(7.2.15)库,并且仅公开我正在用作public_api.ts中的接口的抽象类。但是,我总是遇到说Cannot find module './lib/my-module/my.service的错误。

这样做的原因是,我需要一个单例服务来记录库组件中的事件,并通过EventEmitter将其提供给外部应用程序。我只希望应用程序本身有权访问EventEmitter,而不希望服务中的其他方法。所以我这样创建了我的服务:

my.service.ts

@Injectable()
export class MyService implements AppInterface, LibraryInterface {
  private _events: Subject<string>

  public getEventObservable (): Observable<string> {
    return this._events.asObservable()
  }

  public addEvent (eventCode: string): void {
    this._events.next(eventCode)
  }
}

app-interface.ts

export abstract class AppInterface {
  public abstract getEventObservable (): Observable<string>
}

library-interface.ts

export abstract class LibraryInterface {
  public abstract addEvent (eventCode: string): void
}

我希望在我的库中的模块中提供服务,例如:{ provide: AppInterface, useClass: MyService }{ provide: LibraryInterface, useClass: MyService }。但是,如果我在AppInterface中导出的模块中提供public_api.ts,则要求我同时导出public_api.ts中的接口和服务,否则我将从第一段中得到错误。我只希望使用我的媒体库的应用能够导入界面,而不是服务。

如果我从不在任何地方提供AppInterface,并且在LibraryInterface中未导出的模块中提供public_api.ts,那么我似乎无法解决另外一个皱纹,我仍然遇到错误。不知道为什么会期望我提供从未提供给应用程序的内部服务...

0 个答案:

没有答案