У меня есть очень большой объем данных (400 000 записей), которые мне нужно показать в таблице данных PrimeNG.Для этого мне нужна таблица отложенной загрузки, поскольку вы не можете загрузить все данные в таблицу за один раз (это приведет к сбою браузера).
Для создания таблицы я использую следующие технологии:
Что я хочу
Я пытаюсь создать ленивую загрузкутаблица, как показано в PrimeNG документах , где данные загружаются с сервера и показаны в таблице.Когда пользователь переходит к следующей вкладке, загружается и отображается следующий объем данных.
Единственное отличие состоит в том, что я получаю все данные с сервера, прежде чем передать их компоненту таблицы.Таким образом, мне нужно будет только выбрать определенные данные из источника данных и показать их пользователю.
Проблема
При попытке реализовать его я столкнулся с проблемой, что функция (onLazyLoad)
вызывается только один раз, в фазе onInit()
перед загрузкой данных с сервера.
Я могу отменить это, добавив [lazyLoadOnInit]="false"
, но это приводит к тому, что функция отложенной загрузки вообще не вызывается.Я надеялся, что смогу вызвать функцию загрузки, изменив свойство [totalRecords]
при загрузке данных, но это также не вызывает функцию.
Я не могу найти никакую другую функцию в коде таблицы PrimeNG , которую можно использовать для запуска (onLazyLoad)
, или я что-то упустил?
Код
public ngOnInit(): void {
this.cars$ = this.carService.entities$; // = []
this.carService.getAll(); // = [Car, Car, Car, Car] OR []
}
this.carService.entities$
имеет значение по умолчанию []
и заполняется результатом функции getAll()
(это также может быть []
, если естьрезультатов нет)
Я воспроизвел мою проблему в a StackBlitz .Здесь вы можете видеть, что данные никогда не показываются, потому что (onLazyLoad)
вызывается только в первый раз, когда данные пусты.
Обратите внимание, что я использую Angular Async pipe для передачи данных в мой компонент.Это означает, что мне нужно проверить изменения в функции ngOnChanges()
.