Глобальные переменные получают и устанавливают в приложении Angular - PullRequest
0 голосов
/ 15 января 2020

Как я могу получить и установить глобальные переменные в 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() {
      }
    }

Ответы [ 3 ]

1 голос
/ 15 января 2020

используйте @Injectable для вашей службы

импортируйте эту службу в свой класс и внедрите в свой конструктор. если вы хотите загрузить переменную или вызвать функцию при загрузке класса, вызовите ее внутри конструктора или за ее пределами

    constructor(private sharedService: SharedService) {
        this.name= sharedService.name;
    }
1 голос
/ 15 января 2020

Вам необходимо сделать этот класс сервисом с @Injectable decorator и указанным в root вашего приложения. После этого в каждом из ваших компонентов, где вы хотите его использовать, вам нужно создать его экземпляр в конструкторе.

constructor(public sharedService: SharedService) ()

и тогда у вас будет доступ к вашим функциям.

0 голосов
/ 15 января 2020

Удалить SharedService из массива провайдеров. Это создает несколько экземпляров SharedService

...