角组件时,服务更新
问题描述:
我有一个角2应用程序与events
服务具有delete
方法:角组件时,服务更新
let EVENTS: TimelineEvent[] = [
{
event: 'foo',
timestamp: 1512205360,
},
{
event: 'bar',
timestamp: 1511208360,
}
];
@Injectable()
export class EventsService {
getEvents(): Promise<TimelineEvent[]> {
return Promise.resolve(EVENTS);
}
deleteEvent(deletedEvent) {
EVENTS = EVENTS.filter((event) => event.timestamp != deletedEvent.timestamp);
}
}
我的主要成分显示这些事件,并使用onClick
处理程序来调用服务的deleteEvent
方法:
@Component({
selector: 'my-app',
providers: [EventsService],
template: `
<div>
<event *ngFor="let timelineEvent of events" [timelineEvent]="timelineEvent" [deleteEvent]="deleteEvent"></event>
</div>
`,
})
export class App implements OnInit {
constructor(private eventsService: EventsService) {
}
events
getEvents(): void {
this.eventsService.getEvents().then(events => this.events = events);
}
deleteEvent(event): void {
this.eventsService.deleteEvent(event);
}
ngOnInit(): void {
this.getEvents();
}
}
我可以通过console.logging
看到EVENTS
阵列,这是正确地更新。但显示不更新。我哪里错了?
答
您在服务中删除事件,而不是在组件中。组件中的事件列表不会更新。
办法解决它:
1 - 使您服务deleteEvent方法返回的承诺:
deleteEvent(deletedEvent) {
EVENTS = EVENTS.filter((event) => event.timestamp !== deletedEvent.timestamp);
return Promise.resolve("Successfully deleted");
}
2 - 而在你的组件,重新加载的删除动作的成功事件:
deleteEvent = (event) => {
this.eventsService.deleteEvent(event).then(res => this.getEvents());
}
谢谢。我已将'this.getEvents()'添加到组件的'delete'方法中,但现在它返回错误'this.getEvents不是函数'。我已经更新了Plunker代码。 – GluePear
我已更新答案 – Faly
更新的Plunker - 我仍然得到TypeError:_this.getEvents不是函数。 – GluePear