在Angular 2中使服务变量全局化

时间:2017-08-03 09:35:10

标签: angular angular2-services

如何将Angular 2中的服务变量作为全局变量,以便两个不同的组件可以访问和修改它?

public myMap : Map<string, string> = new Map<string, string>();

这是服务中的地图,我最初使用组件填充它。现在,在应用程序中一段时间​​后,我需要使用不同的组件访问相同的填充映射。我怎么能这样做?

当我使用其他组件访问地图时,它显示为未定义。

2 个答案:

答案 0 :(得分:5)

在所有组件中拥有共享服务。在服务内部,声明一个变量,该变量将保存您要在组件之间共享的值。然后使用getter和setter从服务中分配,检索或修改变量,而不调用服务器。

这是在多个组件之间共享变量的简单example

import { Injectable } from '@angular/core'; @Injectable() export class AppService{ myGlobalVar; constructor(){ this.myGlobalVar = true; alert("My intial global variable value is: " + this.myGlobalVar); } setMyGV(val: boolean){ this.myGlobalVar = val; } getMyGV(val: boolean){ return this.myGlobalVar; } }

app.module.ts

@NgModule({ ... providers: [ AppService ], bootstrap: [ AppComponent ] }) export class AppModule { } 提供商中添加服务:

component.ts

constructor(private appService: AppService) { } changeGV(val){ this.appService.setMyGV(val); } showGV(){ alert("GV: " + this.appService.getMyGV()); } 注入服务并使用它来设置,检索或修改变量。

{{1}}

答案 1 :(得分:3)

对于您注入服务的组件下的所有组件,Angular服务都是单例。

换句话说,当你在组件A中注入你的服务时,它将采用已存在的这个服务的实例,如果不是它不存在它将创建 一个实例。

因此,当所有组件获得相同的实例时,其中的每个属性都将被共享。