我有一个包含两个组件的应用程序:一个是元素列表,另一个是元素详细信息。两者都共享服务,这是一种显示元素的存储(详细信息组件也会修改列表中的给定元素)。当我使用屏幕顶部的导航按钮返回时,在操作栏中,从详细信息组件到列表组件(在修改共享数据之后),在列表视图上显示新的,已更改的数据会有一点延迟。有没有办法立即查看更改的数据?某种强制在后台渲染或刷新视图?
在我的真实应用中,该列表是在用户滚动列表时加载的(因此,它加载20条第一条记录,然后在他向下滚动视图时以块的形式获取下一个元素)。我不想再次获取所有数据,也不想在他导航至详细信息时将视图保留在同一位置。
这是NativeScript游乐场显示的问题:https://play.nativescript.org/?template=play-ng&id=foWkYF
答案 0 :(得分:0)
您的数据(Array
)被保存在BehaviorSubject
中,当您调用next(...)
时,会认为整个数据集已更新,因此ListView会完全重新加载整个列表。您只需在索引处更新Object,即可立即立即仅更新特定的ListItem。
star(id: number): Observable<Element> {
return this._elements.pipe(
take(1),
tap(array => {
array.some(item => {
if (item.id === id) {
item.starred = !item.starred;
return true;
}
})
}),
switchMap(() => this.takeById$(id))
);
}
编辑:
此外,您不应该至少将ListView放置在ScrollView&StackLayout中,而不必将显式高度设置为ListView。 ListView本身具有内置的可滚动容器,因此在大多数情况下应该足够。