@Vadimqa

Angular: как получить данные от апи и объявить переменные глобально?

Помогите получить данные пользователя из АПИ, присвоить переменным, которые использовать в любом из компонентов

UPD: Немного переделал скрипт, упростил. Старые наброски убрал под спойлер. Теперь работает, но в пределах одного компонента. А на остальные не распространяется. А я хотел, чтобы переменные {{ user?.login }} были видны глобально, во всех шаблонах

Предыдущиая версия

АПИ:
{"login": "test", "ban": 0}
Корневой app.module.ts:
...
import { UserService } from './shared/user.service';
...
providers: [ UserService ],
...

user.service.ts
Вот тут начинаются проблемы, мое понимание углового пока на уровне копипаста
import {Injectable} from '@angular/core';
import {HttpClient} from '@angular/common/http';

export class User {
      login: string;
      ban: number;
}

@Injectable()
export class UserService {

  constructor(private http: HttpClient) { }

  user: User

  ngOnInit() {
    this.http.get('/server/api/userService').subscribe((data: User) => {
    this.user = data;
     test = this.user['login']; // <- В этом моменте непонятности
    }
    );
  }
}

Помогите хотя бы для начала записать в консоль логин пользователя



АПИ
{"login": "test", "ban": 0}

app.component.ts
import { Component } from '@angular/core';
import { HttpClient } from '@angular/common/http';


export class User {
  login: string;
  ban: number;
}


@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css'],
})


export class AppComponent {

  user: User

  constructor(private http: HttpClient) {}

  ngOnInit() {
    this.http.get('/server/api/userService').subscribe((data: User) => (this.user = data))
  }

}
  • Вопрос задан
  • 669 просмотров
Пригласить эксперта
Ответы на вопрос 3
Если не ошибаюсь, экземпляр сервиса создается 1, и потом все компоненты ссылаются на него. Значит, можно попробовать в классе сервиса объявить некое хранилище, в которое будете складывать данные.
Ответ написан
@Sashqa
Вы создаете сервис, в этом сервисе пишете методы для работы с api
Получили данные, для передачи их в другие компоненты вы можете использовать либо общий сервис, либо прокидывать через декораторы Input/Output, ну либо вообще записать в localStorage и дергать оттуда.
Ответ написан
Комментировать
Xuxicheta
@Xuxicheta
инженер
пройстейший сервис чтобы один раз спросить бэкенд, закешировать и отдавать потом компонентам, чтобы они подписывались.
@Injectable({
  providedIn: 'root'
})
class UserService {
  private user$;
  
  constructor(private http: HttpClient) {}

  fetchUser(): Observable<User> {
    if (!this.user$) {
      this.user$ = this.http.get('/server/api/userService').pipe(shareReplay(1))
   }
   return this.user$;
 }
}


Его никуда не надо загружать, просто помещать в конструктор компонентов, там где он будет использваться. Подходит для данных, актуальных и неизменных на протяжении всей жизни приложения.

И этот код не принесет вам пользы, если вы не понимаете что он делает.
Ответ написан
Ваш ответ на вопрос

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

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