Зачем внедрять бесконечную прокрутку для веб-потребностей, если она доступна в готовом виде?

Бесконечная прокрутка — это визуализация огромных объемов данных в одном окне, которое не заканчивается. Обычно при бесконечной прокрутке данные извлекаются по требованию, когда головка прокрутки достигает нижней части окна.

Аналогично работает бесконечная прокрутка в DataGrid. Изначально часть данных отображается в сетке, а когда пользователь прокручивает ее до конца, делается дополнительный запрос и добавляются извлеченные данные. Таким образом, мы можем загружать огромное количество данных без снижения производительности DataGrid. Бесконечная прокрутка — это альтернатива пейджингу, когда новые запрошенные данные отображаются на новых страницах.

Некоторые из наиболее распространенных примеров бесконечной прокрутки:

  • Пролистывание твитов в Твиттере
  • Пролистывание постов в Facebook
  • Поиск картинок Google

В этом сообщении блога мы покажем вам, как легко вы можете визуализировать огромные объемы данных в одном представлении сетки, используя функцию бесконечной прокрутки в нашей Angular Data Grid.

Почему мы используем бесконечную прокрутку

Бесконечная прокрутка обеспечивает отличный пользовательский интерфейс, она эффективно запрашивает только необходимые данные и уменьшает количество считываний данных с сервера туда и обратно.

Что особенного в бесконечной прокрутке в EJ2 DataGrid?

Все современные браузеры имеют жесткое ограничение на объем памяти, выделяемой для конкретной веб-страницы, и браузеры не предназначены для обработки миллионов элементов.

Из-за этого ограничения браузера при постоянном добавлении данных в компонент сетки браузер перестает отвечать на запросы. Это связано с постепенным увеличением веса DOM и памяти браузера.

Чтобы преодолеть эту проблему, наша DataGrid снабжена опцией режима кэширования. При включении этой функции DataGrid будет поддерживать элементы строки на основе значения счетчика maxBlocks в параметре InfiniteScrollSettings. Как только этот предел будет достигнут, DataGrid удалит элементы строки только из DOM и сохранит данные в экземпляре сетки.

Шаги по реализации бесконечной прокрутки с замороженной сеткой в ​​​​среде Angular

Шаг 1: Настройте среду Angular

Используйте Angular CLI для настройки приложений Angular. Чтобы установить Angular CLI, используйте следующую команду.

npm install -g @angular/cli

Шаг 2: Создайте приложение Angular

Запустите новое приложение Angular, используя следующую команду Angular CLI.

новое мое приложение

cd my-app

Шаг 3: Добавьте пакет Syncfusion Grid

Все пакеты Essential JS 2 NuGet публикуются в реестре npmjs.com.

Чтобы установить компонент Data Grid, используйте следующую команду.

npm install @syncfusion/ej2-angular-grids --save

-save укажет NPM включить пакет сетки в раздел dependencies файла package.json.

Шаг 4: Регистрация модуля Grid

Импортируйте модуль Grid в приложение Angular (app.module.ts) из пакета @syncfusion/ej2-angular-grids [src/app/app.module.ts].

import { NgModule } from '@angular/core'; 
import { BrowserModule } from '@angular/platform-browser'; 
// import the GridModule for the Grid component 
import { GridModule } from '@syncfusion/ej2-angular-grids'; 
import { AppComponent } from './app.component'; 
@NgModule({
 //declaration of ej2-angular-grids module into NgModule 
 imports: [ BrowserModule, GridModule ],
 declarations: [ AppComponent ],
 bootstrap: [ AppComponent ] 
}) 
export class AppModule { }

Шаг 5: Добавление ссылки на CSS

Следующие файлы CSS доступны в папке пакета ../node_modules/@syncfusion. Добавьте ссылку на эти файлы CSS в styles.css[src/styles.css], используя следующий код.

@import '../node_modules/@syncfusion/ej2-base/styles/material.css'; @import '../node_modules/@syncfusion/ej2-buttons/styles/material.css'; 
@import '../node_modules/@syncfusion/ej2-calendars/styles/material.css'; 
@import '../node_modules/@syncfusion/ej2-dropdowns/styles/material.css'; 
@import '../node_modules/@syncfusion/ej2-inputs/styles/material.css'; 
@import '../node_modules/@syncfusion/ej2-navigations/styles/material.css'; 
@import '../node_modules/@syncfusion/ej2-popups/styles/material.css'; 
@import '../node_modules/@syncfusion/ej2-splitbuttons/styles/material.css'; 
@import '../node_modules/@syncfusion/ej2-angular-grids/styles/material.css';

Шаг 6: Добавьте компонент Data Grid

Измените шаблон в файле [src/app/app.component.ts], чтобы визуализировать компонент сетки. Добавьте сетку данных Angular с помощью селектора ejs-grid в разделе шаблона файла app.component.ts.

import { Component, OnInit } from '@angular/core'; 
@Component({
 selector: 'app-root',
 // specifies the template string for the Grid component
 template: `<ejs-grid> </ejs-grid>` 
}) 
export class AppComponent implements OnInit {
 ngOnInit(): void {
 } 
}

Шаг 7: Определение источника данных и столбцов

Привяжите данные к компоненту Data Grid с помощью свойства dataSource. Он либо принимает массив объектов JavaScript, либо экземпляр DataManager. Затем определите столбцы на основе свойств источника данных.

import { Component, OnInit } from '@angular/core'; 
import { getData } from './datasource'; 
@Component({
selector: 'app-root',
template: `<ejs-grid [dataSource]='data'>
<e-columns>
<e-column field='TaskID' headerText='Task ID' textAlign='Right' width=90></e-column> 
<e-column field='Engineer' headerText='Engineer' width=120></e-column> 
<e-column field='Designation' headerText='Designation'width=120></e-column> 
<e-column field='Estimation' headerText='Estimation' textAlign='Right' width=120></e-column> 
<e-column field='Status' headerText='Status'width=120></e-column> </e-columns> 
</ejs-grid>` 
}) 
export class AppComponent implements OnInit {
 public data: object[];
 ngOnInit(): void {
  this.data = getData(10000);
 }
}

Шаг 8: Внедрение модуля

Чтобы создать сетку с дополнительными функциями, внедрите необходимые модули. Для расширения основных функций сетки используются следующие модули:

  • InfiniteScrollService: добавьте этот провайдер, чтобы использовать функцию бесконечной прокрутки.
  • FreezeService: внедрите этот провайдер, чтобы использовать функцию закрепленных строк и столбцов.

Эти модули должны быть внедрены в раздел провайдера корневого класса NgModule или компонента.

Шаг 9. Включите бесконечную прокрутку

Функцию бесконечной прокрутки можно включить, установив для свойства enableInfiniteScrolling значение true. Кроме того, мы должны внедрить модуль InfiniteScrollService в раздел провайдера.

Шаг 10. Установите закрепленные столбцы

Закрепленные столбцы можно определить с помощью свойства frozenColumns. Также добавьте модуль FreezeService в раздел провайдера.

import { Component, OnInit } from '@angular/core'; 
import { getData } from './datasource'; 
@Component({
selector: 'app-root', 
template: `<ejs-grid [dataSource]='data' height=300 [enableInfiniteScrolling]='true' [frozenColumns]='2'> 
<e-columns> 
<e-column field='TaskID' headerText='Task ID' textAlign='Right' width=90></e-column> 
<e-column field='Engineer' headerText='Engineer' width=120></e-column> 
<e-column field='Designation' headerText='Designation'width=120></e-column> 
<e-column field='Estimation' headerText='Estimation' textAlign='Right' width=120></e-column> 
<e-column field='Status' headerText='Status'width=120></e-column> </e-columns> 
</ejs-grid>` 
}) 
export class AppComponent implements OnInit {
 public data: object[];
 ngOnInit(): void {
  this.data = getData(10000);
 } 
}

Шаг 11: Запустите приложение

Используйте следующую команду для запуска приложения в браузере.

ng serve --open

Вывод будет выглядеть так, как показано на следующем снимке экрана.

Ресурс

Вы можете скачать это приложение из этого места GitHub.

Вывод

Надеюсь, теперь у вас есть четкое представление о функции бесконечной прокрутки и о том, как ее использовать в Syncfusion EJ2 DataGrid. Эта функция доступна с выпуска Тома 2 2020 года.

Если вы уже являетесь клиентом, вы можете скачать наш пакет Angular со страницы Лицензии и загрузки. Если вы еще не являетесь клиентом, вы можете попробовать нашу 30-дневную бесплатную пробную версию, чтобы проверить все наши компоненты Angular, которые мы можем предложить. Вы также можете изучить образцы в нашем репозитории GitHub.

Если у вас есть какие-либо вопросы об этом блоге, сообщите нам об этом в разделе комментариев ниже. Вы также можете связаться с нами через наш форум поддержки, Direct-Trac или портал обратной связи. Мы всегда рады Вам помочь!

Первоначально опубликовано на https://www.syncfusion.com 4 августа 2020 г.