【发布时间】:2017-12-01 23:29:03
【问题描述】:
我正在尝试使用 async 管道和 *ngFor 来显示异步获取的项目数组。
<ul>
<li *ngFor="let item of items | async; trackBy: trackPost">
{{item.text}}
</li>
</ul>
ngOnInit() {
// very simple http call; returns an array of [{id: 1, text: "something"}]
this.items = this.itemService.loadItems();
}
trackPost(index, item) { return item.id; }
这很好用。然后我想添加一个项目:
async addItem(text) {
await this.itemService.addItem({text});
// reload items after adding
this.items = this.itemService.loadItems();
}
这也有效,它会在添加后正确更新项目。
问题在于它会重新加载整个数组,而不仅仅是追加项目。您可以通过动画注意到这一点(如果您为项目设置动画)。我知道我可以自己处理订阅并使用数组,但我想知道是否有办法使用异步管道来做到这一点。
有没有办法让我将新项目添加到现有的 observable 中?如果做不到这一点,有没有办法让模板正确跟踪项目,而不是将它们视为重新添加?
【问题讨论】:
-
面临同样的问题,进行 algolia 搜索...
-
如果您只是将
push(newItem)转换为this.items,角度会不会注意到? -
有人知道发生了什么以及任何解决方法吗?谢谢!
标签: javascript angular typescript asynchronous rxjs