Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

205
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda