Невозможно получить данные из файла JSON с помощью HttpClient в Angular 18

Я новичок в Angular 18 и пытаюсь прочитать файл JSON, используя наблюдаемый объект с вызовом HTTP. Несмотря на то, что я просмотрел несколько онлайн-руководств и решений на форумах, я все еще сталкиваюсь с проблемами.

Моя установка

Я создал сервис, который отправляет запрос HTTP на чтение файла JSON. Я проверил, что путь к файлу правильный. Однако я не получаю никаких данных и заметил, что HttpClientModule устарел.

Фрагменты кода

Служба Сотрудника (employee.service.ts)

import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
import { IEmployee } from './employeeInterface'; 

@Injectable({
  providedIn: 'root'
})
export class EmployeeService {
  private _dataUrl: string = '/assets/data/employees.json';

  constructor(private http: HttpClient) { }

  getEmployees(): Observable<IEmployee[]> {
    return this.http.get<IEmployee[]>(this._dataUrl);
  }
}

AppModule (app.module.ts)

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { FormsModule } from '@angular/forms';

import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { MyTestPageComponent } from './my-test-page/my-test-page.component';
import { EmployeeListComponent } from './employee-list/employee-list.component';
import { EmployeeDetailsComponent } from './employee-details/employee-details.component';
import { EmployeeService } from './employee.service';
import { HttpClientModule } from '@angular/common/http';  

@NgModule({
  declarations: [
    AppComponent,
    MyTestPageComponent,
    EmployeeListComponent,
    EmployeeDetailsComponent
  ],
  imports: [
    BrowserModule,
    AppRoutingModule,
    FormsModule,
    HttpClientModule
  ],
  providers: [EmployeeService],
  bootstrap: [AppComponent]
})
export class AppModule { }

КомпонентСпискаСотрудников (employee-list.comComponent.ts)

import { Component, OnInit } from '@angular/core';
import { IEmployee } from '../employeeInterface';
import { EmployeeService } from '../employee.service';

@Component({
  selector: 'app-employee-list',
  template: `
    <h2>Employee List</h2>
    <ul *ngFor = "let employee of employeesList">
      <li>{{ employee.name }}</li>
    </ul>
  `,
  styles: []
})
export class EmployeeListComponent implements OnInit {
  public employeesList: IEmployee[] = [];

  constructor(private employeeService: EmployeeService) { }

  ngOnInit(): void {
     this.employeeService.getEmployees().subscribe(data => this.employeesList = data);
   
  }
}

СотрудникИнтерфейс.ts

export interface IEmployee {
  id: number;
  name: string;
  age: number;
}

Дополнительная информация

Файл JSON (employees.json) находится в src/assets/data и имеет правильный формат. В консоли ошибок нет, но данные не извлекаются. Я заметил сообщение о том, что HttpClientModule устарел, но не могу найти четких указаний о том, что использовать вместо него.

Буду признателен за любые рекомендации и предложения по решению этой проблемы. Спасибо!

Вы проверили запрос и какой код ошибки вы получили? 404?

Yong Shun 12.06.2024 11:13

@YongShun не получает никаких ошибок. Он не извлекает данные. Массив пуст.

Abdul 12.06.2024 11:13

@Абдул, пожалуйста, поделитесь репозиторием stackblitz или github?

Naren Murali 12.06.2024 11:20
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
1
3
413
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Убедитесь, что вы настроили папку ресурсов, чтобы разрешить доступ к файлам и папкам в angular.json.

"assets": ["src/assets"]

Убедитесь, что ваш файл jobs.json содержит массив JSON.

[
  {
    "id": 1,
    "name": "Emp One",
    "age": 44
  }
]

Кроме того, вы не используете employeeService в своем EmployeeListComponent.

ngOnInit(): void {
  this.employeeService
    .getEmployees()
    .subscribe((data) => (this.employeesList = data));
}

Демо @ StackBlitz

@YougShun, это опечатка в посте.

Abdul 12.06.2024 11:34

Спасибо за помощь. Одна проблема решена. Это было с доступом к папке с ресурсами.

Abdul 12.06.2024 13:42

Но он отображается в компоненте по умолчанию и по-прежнему не отображается в другом компоненте. Проверяю это

Abdul 12.06.2024 13:44

Обновил StackBlitz с помощьюСотрудникаListComponent, теперь могу отображать данные.

Yong Shun 12.06.2024 13:51

Вы действительно используете Angular 18? Где находится конфигурация вашего приложения? Для использования HttpClient вам следует использовать ProvideHttpClient(). Я думаю, что сообщение об устаревании, которое вы получили о HttpClientModule, связано с этим.

Посмотрите этот пост HttpClientModule устарел в Angular 18, какая замена?

Другие вопросы по теме