یکی از امکانات Angular
7، ویژگی Virtual Scrolling میباشد. در صورتیکه شما قصد داشته باشید یک لیست بزرگ از المنتها را بارگذاری کنید، اینکار میتواند بر روی کارآیی برنامهی شما تاثیر بگذارد . تگ زیر
<cdk-virtual-scroll-viewport></cdk-virtual-scroll-viewport>
می تواند برای بارگذاری تنها بخشهای قابل مشاهدهی از یک لیست، بر روی صفحه نمایش استفاده شود و همچنین تنها آیتمهایی Render خواهند شد که میتواند آنها را در صفحه نمایش جا دهد. اگر لیست بارگذاری شده را اسکرول کنیم، در این حالت المنتها در DOM به صورت پویا load و unload میشوند.
قبل از پیاده سازی ، لازم است Angular CLI را به آخرین نسخه بروز رسانی کنیم. برای بروز رسانی Angular CLI دستور زیر را اجرا میکنیم:
npm install -g @angular/cli
بعد از نصب با استفاده از ng version نسخهی Angular CLI را بررسی میکنیم که باید بزرگتر از 7 باشد:
حالا نوبت به ایجاد یک پروژهی جدید میباشد. با استفاده از دستور زیر یک پروژه جدید ایجاد میشود:
ng new angular7-virtualScrolling
بعد از تایید دستور بالا، دو سؤال از شما پرسیده میشود؟
1- آیا قصد دارید Angular routing اضافه شود یا نه؟ ( در نسخههای قبلی با استفاده از routing-- این کار را انجام میدادیم)
2-انتخاب فرمت stylesheet که قصد استفادهی از آنرا دارید ( با کلیدهای جهتی بالا و پایین روی صحفه کلید میتوانید یکی از گزینهها را انتخاب کنید )
برای استفاده از Virtual Scrolling نیاز است پکیج زیر را نصب کنیم :
npm install @angular/cdk@latest
بعد از نصب، دستور ng serve را اجرا میکنیم تا بررسی کنیم که برنامه به درستی اجرا میشود یا نه. سپس فایل app.module.ts را باز میکنیم و ScrollingModule را در بخش imports اضافه میکنیم. اکنون نیاز است تا یک آرایه را برای نمایش آیتمهای لیست، تولید کنیم. قطعه کد زیر در فایل app.component.ts قرار دارد که یک آرایه عددی را ایجاد میکند و تعدادی آیتم را به آن اضافه میکند:
title = 'Angular 7 – Virtual Scrolling feature';
scrollItems: number[] = [];
constructor() {
for (let index = 0; index < 10000; index++) {
this.scrollItems.push(index);
}
}
در فایل app.component.html قطعه کد زیر را قرار میدهیم:
<div>
<h4>
{{this.title}}
</h4>
<cdk-virtual-scroll-viewport itemSize="100">
<div *cdkVirtualFor="let n of scrollItems">Item {{n}}</div>
</cdk-virtual-scroll-viewport>
</div>
داخل تگ cdk-virtual-scroll-viewport، یک div را ایجاد و سپس یک دایرکتیو را به نام cdkVirtualFor* به آن اضافه میکنیم. این دایرکتیو، ngFor* را درون cdk-virtual-scroll-viewport، جایگزین میکند که شما با استفاده از آن میتوانید یک حلقه بر روی آرایه scrollItems جهت پیمایش ایجاد کنید.
تمام ! اکنون پروژه را اجرا کنید.
در اولین بار اجرا :
بعد از اسکرول کردن لیست :
همانطور که مشاهده میکنیم المنتهای قبلی unload شدند و المنتهای جدید load شدند