Я новичок в 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 устарел, но не могу найти четких указаний о том, что использовать вместо него.
Буду признателен за любые рекомендации и предложения по решению этой проблемы. Спасибо!
@YongShun не получает никаких ошибок. Он не извлекает данные. Массив пуст.
@Абдул, пожалуйста, поделитесь репозиторием stackblitz или github?





Убедитесь, что вы настроили папку ресурсов, чтобы разрешить доступ к файлам и папкам в 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));
}
@YougShun, это опечатка в посте.
Спасибо за помощь. Одна проблема решена. Это было с доступом к папке с ресурсами.
Но он отображается в компоненте по умолчанию и по-прежнему не отображается в другом компоненте. Проверяю это
Обновил StackBlitz с помощьюСотрудникаListComponent, теперь могу отображать данные.
Вы действительно используете Angular 18? Где находится конфигурация вашего приложения? Для использования HttpClient вам следует использовать ProvideHttpClient(). Я думаю, что сообщение об устаревании, которое вы получили о HttpClientModule, связано с этим.
Посмотрите этот пост HttpClientModule устарел в Angular 18, какая замена?
Вы проверили запрос и какой код ошибки вы получили? 404?