Где хранить данные, загруженные с HTTP-клиента в Angular?

#angular

Вопрос:

Существует служба, которая загружает данные с сервера:

 @Injectable()
export class AddressingService {
    public addressing: any[] = [];
    public objectlInfo: any;

    constructor(private httpClient: HttpClient) {}

    loadAddressing(unom: number): Observable<any> {
        return this.httpClient.get();
    }

    getObjectInfo(unom: number, version: string): Observable<any> {
        return this.httpClient.get();
    }
   
    setAddressing(data) {
         this.addressing = data;
    }
   
    getAddressing() {
        return this.addressing;
    }
}
 

Как лучше использовать сервис:

 this.AddressingService.loadAddressing().subscribe((data) => {
    this.AddressingService.setAddressing(data);
});
 

Или вот так:

 loadAddressing(unom: number): Observable<any> {
        return this.httpClient.get().subscribe((data => {
              this.addressing = data;
         }); 
    }
 

Еще один способ создать наблюдаемое и заполнить его внутри сервиса.

Комментарии:

1. Это зависит от программиста, никаких жестких и быстрых правил

2. Служба должна предоставлять методы получения данных, а не их хранения.

3. В соответствующих компонентах, т. е. в идеале в памяти. Если вы хотите сохранить их, используйте localStorage.

4. Как я обычно поступаю в Angular, когда служба получает только данные, а затем компонент (или другая служба) обрабатывает данные. Мои услуги в основном являются однострочными , которые просто выполняют return this.http.get<Type>("url"); , а затем мои компоненты подписываются на это, чтобы получить информацию

5. Я думаю, что компонент не должен хранить данные, а только использовать и визуализировать. Поэтому любые манипуляции должны происходить на сервере, где я размещаю данные. Также назначьте данные изменяемым службам.

Ответ №1:

Если вы хотите сохранить данные в памяти, я бы использовал NGXS или NgRx. Вы сможете извлечь данные один раз и использовать их в нескольких компонентах, пока вы не обновите страницу.

Если вы хотите сохранить данные после перезагрузки страницы, используйте идентификатор local — или sessionstorage.