Я использую angular 9 для бесконечной прокрутки с помощью CdkVirtualScrollViewport. Я звоню (scrolledIndexChange)
, чтобы обнаружить изменение индекса. По мере изменения индекса я хочу загрузить больше данных из моего API.
Но проблема в том, что индекс всегда равен нулю. Даже если пользователь пытается прокрутить, значение индекса не меняется.
В моем API у меня есть два поля - limit и skip. Лимит определяет, сколько записей вы хотите получить, а пропустить - сколько записей нужно пропустить. Значит, значение пропуска равно 0 для индекса scrolledIndexChange
0, а значение пропуска увеличивается, если scrolledIndexChange
больше нуля.
Но индекс не меняется. Еще проверил, что не дошло до последней страницы
.ts
import { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';
@ViewChild(CdkVirtualScrollViewport) viewport: CdkVirtualScrollViewport;
constructor(public FactService : FactService) {
this.get_count()
}
get_count(){
this.FactService.getcount().subscribe(data => {
if(data){
console.log(data.count)
this.count = data.count
this.total_pages = Math.ceil(data.count/this.limit)
console.log(this.total_pages)
}
})
}
trackByIdx(i: number) {
return i;
}
getdata(limit, skip){
this.FactService.getdata(limit, skip).subscribe(data =>{
if(data){
console.log(data);
this.infinite = this.infinite.concat(data)
}
})
}
index(val) {
this.page ++ ;
console.log(val)
console.log(this.page , this.total_pages)
if(val == 0) {
console.log("zero")
this.getdata(8,0)
}
else {
if(this.page === this.total_pages) {
console.log("finished")
return ;
}
else {
const end = this.viewport.getRenderedRange().end;
const total = this.viewport.getDataLength();
console.log(`${end}, '>=', ${total}`);
console.log("else")
if(end === total) {
this.getdata(this.limit, this.skip+8)
}
}
}
html
<cdk-virtual-scroll-viewport itemSize="100" (scrolledIndexChange)= "index($event)">
<li *cdkVirtualFor="let item of infinite; trackBy: trackByIdx">
{{item.purchase_stock_id}}
</li>
</cdk-virtual-scroll-viewport>