Отсроченное обновление представления после возвращения из представления на вершине стека - PullRequest
0 голосов
/ 31 октября 2019

У меня есть приложение с двумя компонентами: один - список элементов, а другой - детали элементов. Оба совместно используют сервис, который является своего рода хранилищем отображаемых элементов (компоненты деталей также изменяют данный элемент в списке). Когда я возвращаюсь назад с помощью кнопки навигации в верхней части экрана, на панели действий, от компонента сведений к компоненту списка (после изменения общих данных), я вижу небольшую задержку с отображением новых, измененных данных в представлении списка. Есть ли способ мгновенно увидеть измененные данные? Что-то вроде принудительного рендеринга или обновления представления в фоновом режиме?

В моем реальном приложении список загружается как пользовательский список прокрутки (поэтому он загружает 20 первых записей, а затем получает следующие элементы в виде кусков при прокрутке вниз). вид). Я не хочу получать все данные снова при возвращении, а также я хочу сохранить вид в том же месте, когда он перешел к деталям.

Вот игровая площадка NativeScript, показывающая проблему: https://play.nativescript.org/?template=play-ng&id=foWkYF

1 Ответ

0 голосов
/ 07 ноября 2019

Ваши данные (Array) хранятся в BehaviorSubject, и когда вы звоните next(...), считается, что весь набор данных обновляется, поэтому ваш ListView полностью перезагружает весь список. Вы можете просто обновить объект по индексу, который немедленно обновит только конкретный элемент 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 должно быть достаточно в большинстве случаев, поскольку он имеет встроенный прокручиваемый контейнер.

...