如何使服务在Angular库中具有全局性?

时间:2019-12-25 10:28:48

标签: angular angular8

我已经在Angular项目中分离了库。该库具有服务-dist -js |-script.js -libs -node_modules -public -src |-assets | |-imagen.jpg |-components |-App.vue |-main.js

MapLibraryService

它已在库模块中注册:

import { ReonMapApi } from "./map-api";

export class MapLibraryService {
  private readonly mapConfig = { key: "k123456_78" };

}

在其他零件应用程序中,我尝试获取此服务的实例:

@NgModule({
  declarations: [MapLibraryComponent, MenuToolsComponent],
  imports: [],
  exports: [MapLibraryComponent],
  providers: nMapLibraryService]
})
export class MapLibraryModule {}

它返回了我另一个MapLibraryService实例

4 个答案:

答案 0 :(得分:3)

如果您使用的是Angle 9 Release候选版本,则可以使用平台注入器, 它将提供页面上所有应用程序共享的特殊单例。

@Injectable({
  providedIn: 'platform'
})

For More Info

答案 1 :(得分:2)

您应使用@Injectable装饰服务类

@Injectable({
  providedIn: 'root'
})
export class MapLibraryService {
  private readonly mapConfig = { key: "k123456_78" };

}

答案 2 :(得分:2)

如果我对您的理解正确,则需要使用

装饰服务
@Injectable({
  providedIn: 'root',
})

Read more about singletons here

也请检查有关providerIn的答案:“ platform”,但这取决于您应用的角度版本。

答案 3 :(得分:1)

使服务在角度上成为全局的两种方法。

1)在您的服务中添加一行

@Injectable({
  providedIn: 'root',
})

export class MapLibraryService {
  private readonly mapConfig = { key: "k123456_78" };

}

OR

2)在app.module.ts中注册服务:

providers: [MapLibraryService]