gpt4 book ai didi

javascript - 服务更新时 Angular 组件未更新

转载 作者:行者123 更新时间:2023-11-30 21:08:35 24 4
gpt4 key购买 nike

我有一个 Angular 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 数组看到它已正确更新。但是显示没有更新。我哪里错了?

这里的示例代码:https://plnkr.co/edit/cENnHeHORnDT50RaTyoI .

最佳答案

您在您的服务中删除事件,而不是在您的组件中。您的组件中的事件列表保持未更新。

解决方法:

1 - 让您的服务返回 promise 的 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());
}

关于javascript - 服务更新时 Angular 组件未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46366060/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com