Задать вопрос
@Alex10214

Как создать глобальную переменную?

Всем привет. Я учу angular и вот у меня такая проблема или дилемма.. У меня есть сервис в котором описан стрим. Вот код:
import { Injectable } from '@angular/core';
import {HttpClient} from "@angular/common/http";
import {Observable} from "rxjs";
import {Post} from "../shared/interfaces";

@Injectable({
  providedIn: 'root'
})
export class DatabaseService {

  constructor(private http: HttpClient) { }

  public getData(): Observable<Post[]> {
     return this.http.get<Post[]>('http://www.json-generator.com/api/json/get/cpepVfJGzS?indent=2')
  }
}

В определенном компоненте я подписываюсь на стрим и получаю данные. Мне их нужно сохранить в виде переменной и дальше оперировать ними. В данный момент у меня много компонентов и мне нужно, чтоб я мог обратиться к этой переменной из любого компонента и обработать данные. Я так понял, что может мне нужно сохранить данные в сервисе и дергать сервис? Или все же можно где-то сохранить данные, так чтоб я их мог достать из любого компонента?
  • Вопрос задан
  • 183 просмотра
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 2
@LastDragon
Переменные можно хратить в `environment.ts`, см https://habr.com/ru/post/477214/ + https://angular.io/guide/build#configuring-applica...
Ответ написан
Комментировать
@CoyoteSS
В вашем случае можно создать глобальный сервис и использовать его как хранилище с использованием BehaviorSubject.

@Injectable({
  providedIn: ‘root’
})
export class SomeService {
  private readonly _valueSubject = new BehaviorSubject(null);
  public readonly value$: Observable<any> = this._valueSubject.asObservable();
  public setItem(value: any): void {
    this._valueSubject.next(value);
  }
}


Далее инжектите его в классах где собираетесь получать/устанавливать значение. Мы через компонент просто подписываемся на Observable для получения новых значений, а внутри сервиса через метод Subject’a next() передаём новое значение. Ну можете использовать конечно же упрощенный подход без Observable/Subject.

В качестве альтернативы можете рассмотреть использование State Manager’a например NGRX, NGXS, Akita, их можно постепенно внедрять в проект.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы