Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

201
Views
Cómo encontrar el recuento de elementos en un ngFor después de que se hayan aplicado las tuberías

Tengo un ngFor para crear filas en una tabla que está filtrada y paginada.

 <tr *ngFor="#d of data.results | filter:filterText | pagination:resultsPerPage:currentPage">

Hay otro elemento en la página que muestra el número de registros mostrados. Estos elementos están inicialmente vinculados a la longitud de los datos.Resultados.

¿Cómo obtengo la longitud de los datos que se muestran después de que se ha aplicado la tubería de filtro para que pueda mostrarlos correctamente? Ninguna de las variables locales proporcionadas en ngFor parece dar cuenta de esto.

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Una forma es usar variables de plantilla con @ViewChildren()

 <tr #myVar *ngFor="let d of data.results | filter:filterText | pagination:resultsPerPage:currentPage">
 @ViewChildren('myVar') createdItems; ngAfterViewInit() { console.log(this.createdItems.toArray().length); }
over 4 years ago · Santiago Trujillo Report

0

Encontré que la solución más simple es la siguiente:

  1. En su componente: agregue un campo que contendrá el conteo actual
 filterMetadata = { count: 0 };
  1. En su plantilla: agregue filterMetadata como un parámetro a la tubería de filtro
 <tr *ngFor="#d of data.results | filter:filterText:filterMetadata | pagination:resultsPerPage:currentPage">
  1. interpole filterMetadata.count en el elemento que muestra el número de registros mostrados.
 <span> {{filterMetadata.count}} records displayed</span>
  1. En la tubería de filtro, actualice el campo filterMetadata.count cuando termine con el filtrado
 transform(items, ..., filterMetadata) { // filtering let filteredItems = filter(items); filterMetadata.count = filteredItems.length; return filteredItems; }

Esta solución todavía usa canalizaciones puras, por lo que no hay degradación del rendimiento. Si tiene varias tuberías que filtran, filterMetadata debe agregarse como parámetro a todas ellas porque angular deja de llamar a la secuencia de tuberías tan pronto como una tubería devuelve una matriz vacía, por lo que no puede simplemente agregarla a la primera o última tubería de filtrado.

over 4 years ago · Santiago Trujillo Report

0

Ese no es exactamente el propósito de la pregunta original, pero también estaba buscando una manera de mostrar el recuento de elementos una vez que se hayan aplicado todas las tuberías. Al combinar el índice y los últimos valores proporcionados por ngFor, encontré esta otra solución:

 <div *ngFor="#item of (items | filter); #i = index; #last = last"> ... <div id="counter_id" *ngIf="last">{{index + 1}} results</div> </div>
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!