cargar más nodos p-tree en desplazamiento angular
Tenemos registros grandes que deben mostrarse en
explore.component.html
<div style="overflow: auto !important;height: 488px !important;" scrolltracker="" (scrollingfinished)="onScrollingFinished()">
<p-tree [value]="files | filter:searchText" selectionmode="single" [(selection)]="selectedFiles" (onnodeselect)="nodeSelect($event)" (onnodeexpand)="expandNode($event)"></p-tree>
</div>
explore.component.ts:
@Output() scrollingFinished = new EventEmitter<void>();
onScrollingFinished() {
this.scrollingFinished.emit();
}
directiva:
“`
import { Directive, Output, EventEmitter, HostListener } from '@angular/core';
@Directive({
selector: '[scrollTracker]'
})
export class ScrollTrackerDirective {
@Output() scrollingFinished = new EventEmitter<void>();
emitted = false;
@HostListener("window:scroll", [])
onScroll(): void {
debugger;
if ((window.innerHeight + window.scrollY) >= document.body.offsetHeight && !this.emitted) {
this.emitted = true;
this.scrollingFinished.emit();
} else if ((window.innerHeight + window.scrollY) < document.body.offsetHeight) {
this.emitted = false;
}
}
}
“`
davy.ai
Parece que la directiva no está funcionando como se espera porque está escuchando el evento “window:scroll” en lugar del evento de desplazamiento en el elemento. Para capturar el evento de desplazamiento en , puedes agregar la directiva a este en lugar del contenedor
explore.component.html:
explore.component.ts:
import { Component, ViewChild, ElementRef } from ‘@angular/core’;
@Component({
selector: ‘app-explore’,
templateUrl: ‘./explore.component.html’,
styleUrls: [‘./explore.component.css’]
})
export class ExploreComponent {
@ViewChild(‘tree’) tree: ElementRef;
onScrollingFinished() {
// agregar nuevos datos al árbol
}
ngAfterViewInit() {
this.tree.nativeElement.addEventListener(‘scroll’, () => {
const treeEl = this.tree.nativeElement;
if ((treeEl.scrollTop + treeEl.offsetHeight) >= treeEl.scrollHeight) {
this.onScrollingFinished();
}
});
}
}
En esta implementación, la directiva se aplica al elemento
¡Espero que esto te ayude! Hazme saber si tienes alguna pregunta adicional.