Я пытаюсь выполнить вызов get в angular, сам вызов работает, так как я могу поместить журнал в подписку и посмотреть возвращенные данные, проблема, с которой я сталкиваюсь, это то, что я не могу назначить данные для моего существующего массива (В настоящее время пусто) и, как показано ниже, код имеет тип Event[]
. Я попытался использовать карту для массива данных, который также имеет тип Event[]
, но безуспешно и то же самое с push, хотя я считаю, что это потому, что вы не можете выдвинуть массив. Я уверен, что есть кое-что простое, что я пропускаю или не могу найти.
Вот звонок, который я делаю, и ниже, что модель Event.
this.httpClient.get<Event[]>('http://127.0.0.1:5555/events-get').subscribe((data) => this.events = data);
export class Event {
constructor(public name: String, public date: Date, public time: Date) {}
}
Я новичок в angular, поэтому могу ошибаться, любая помощь очень ценится.
EDIT
У меня есть еще несколько исследований, но все еще нет радости, может быть, это связано с подпиской. Я попробовал некоторые решения клонирования массива отсюда
РЕДАКТИРОВАТЬ 2
Глядя дальше, я вижу, что содержимое подписки - это функция, то есть что-то, чего мне не хватает в области действия, требует ли моя this.events
какой-то передачи, она установлена на уровне класса.
РЕДАКТИРОВАТЬ 3
import { Event } from '../shared/event.model';
import { Injectable } from '@angular/core';
import { Http, Response } from '@angular/http';
import { Subject } from 'rxjs';
import { map } from 'rxjs/operators';
import { HttpClient } from '@angular/common/http'
@Injectable()
export class AdminService {
eventsChanged = new Subject<Event[]>();
private events: Event[] = [];
constructor(private http: Http, private httpClient: HttpClient) {}
getEvents() {
this.httpClient.get<Event[]>('http://127.0.0.1:5555/events-get')
.pipe(
map(
(data: Event[]) => data.map(event => {
// may need to coerce string to Date types
return new Event(event.name, event.date, event.time)
})
)
)
.subscribe((events: Event[]) => this.events = events);
console.log(this.events);
return this.events;
}
Затем я использую этот вызов в моем компоненте, он не изменился по сравнению с тем, когда он работал с использованием локального массива Event[]
.
this.events = this.adminService.getEvents();