在 Angular 应用程序中获取和设置全局变量

Global variables get and set in an Angular app

如何在 Angular 8 中获取和设置全局变量?问题是,如果我创建一个这样的文件

export class SharedService {
    globalLanguage:string;

    setGlobalVar(currentLanguage:string) {
      this.globalLanguage = currentLanguage;
    }
    getGlobalVar():string{
      return this.globalLanguage;
    }
  }

我尝试通过 set 函数从一个组件进行设置,通过 get 函数从另一个组件读取变量是 undefined。我搜索了几个示例,但它们仅涉及全局常量,而不是我可以更改或更新的全局变量。我该如何解决这个问题?

编辑

我也这样试过,结果一样,变量未定义

这是全局 var 可注入服务:

import { Injectable } from '@angular/core';

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

export class SharedService {
    private globalLanguage:string;

    setGlobalVar(currentLanguage:string) {
      this.globalLanguage = currentLanguage;
    }

    getGlobalVar():string{

        return this.globalLanguage;
    }
  }

这是我从组件 1 开始设置的方式:

import { SharedService } from '../../../shared/vars'

@Component({

  providers: [SharedService],
  selector: 'app-user-menu',
  templateUrl: './user-menu.component.html',
  styleUrls: ['./user-menu.component.scss']
})
export class UserMenuComponent implements OnInit {

  constructor(public translate: TranslateService , public ls: SharedService) {
     (...)
  }

  ngOnInit() {
  }

  languageSwitcher(currentLanguage: string){

    // This is the set point!
    this.ls.setGlobalVar(currentLanguage);
  }
}

这就是我从组件 2 中读取的方式,结果 "undefined":

    import { Component, OnInit } from '@angular/core';
    import { TranslateService } from '@ngx-translate/core';
    import { SharedService } from '../../shared/vars'

    @Component({

      providers: [SharedService],
      selector: 'app-administration',
      templateUrl: './administration-main.component.html',
      styleUrls: ['./administration-main.component.scss']
    })
    export class AdministrationMainComponent implements OnInit {

      constructor(public translate: TranslateService, public ls: SharedService) {
     //This is the output point!        
     console.log('test' + ls.getGlobalVar());
      }

      ngOnInit() {
      }
    }

您需要使此 class 成为带有 @Injectable 装饰器的服务,并在您的应用程序的根目录中提供。之后,在每个要使用它的组件中,您需要在构造函数中实例化它。

constructor(public sharedService: SharedService) ()

然后你就可以访问你的函数了。

为您的服务使用@Injectable

在您的 class 中导入该服务并注入您的构造函数。如果你想在 class 的负载上加载变量或调用函数,请在构造函数内部或外部调用它

    constructor(private sharedService: SharedService) {
        this.name= sharedService.name;
    }

从 providers 数组中删除 SharedService。它正在创建 SharedService

的多个实例