Tabla de AngularJS: Ordenar con orderBy y filtro de mayúsculas
⚡ Resumen inteligente
La ordenación, el ordenamiento y el formato de texto de las tablas en AngularJS se basan en la directiva ng-repeat y una expresión de filtro. Esta página muestra cómo orderBy, uppercase, filter y $index transforman una tabla HTML simple en una cuadrícula dinámica basada en datos.
Las tablas son uno de los elementos comunes utilizados en HTML cuando se trabaja con páginas web.
Tablas en HTML están diseñados utilizando la etiqueta HTML
- etiqueta: esta es la etiqueta principal utilizada para mostrar la tabla.
- – Esta etiqueta se utiliza para segregar las filas dentro de la tabla.
- – Esta etiqueta se utiliza para mostrar los datos reales de la tabla.
- – Esto se utiliza para los datos del encabezado de la tabla.
Usando las etiquetas HTML disponibles arriba junto con AngularJS, podemos facilitar el llenado de datos de la tabla. En resumen, la directiva ng-repeat se utiliza para completar los datos de la tabla.
En este capítulo veremos cómo lograrlo. También analizaremos cómo usar los filtros `orderBy` y `uppercase`, además de cómo usar el atributo `$index` para mostrar los índices de las tablas de AngularJS. El primer paso es el marcado en sí.
Completar y mostrar datos en una tabla
Como comentamos en la introducción de este capítulo, la base para crear la estructura de tabla en una página HTML sigue siendo la misma.
La estructura de la tabla todavía se crea utilizando las etiquetas HTML normales de ,, y . Sin embargo, los datos se completan mediante la directiva ng-repeat en AngularJS.
Veamos un ejemplo sencillo de cómo podemos implementar tablas en AngularJS.
En este ejemplo,
Vamos a crear una tabla en AngularJS que contendrá los temas del curso junto con sus descripciones.
Paso 1) Primero agregaremos una etiqueta de "estilo" a nuestra página HTML para que la tabla pueda mostrarse como una tabla adecuada.
- La etiqueta de estilo se agrega a la página HTML. Esta es la forma estándar de agregar los atributos de formato necesarios para los elementos HTML.
- Estamos agregando dos valores de estilo a nuestra tabla.
- Una es que debería haber un borde sólido para nuestra tabla AngularJS y
- En segundo lugar, se debería añadir relleno a los datos de nuestra tabla de AngularJS.
Paso 2) El siguiente paso es escribir el código para generar la tabla y sus datos.
<!DOCTYPE html> <html> <head> <meta chrset="UTF 8"> </head> <body> <title>Event Registration</title> <style> table,th,td{ border: 1px solid grey; padding:5px; } </style> <script src="https://code.angularjs.org/1.6.9/angular-route.js"></script> <script src="https://code.angularjs.org/1.6.9/angular.min.js"></script> <script src="https://code.angularjs.org/1.6.9/angular.js"></script> <script src="lib/bootstrap.js"></script> <script src="lib/bootstrap.css"></script> <h1> Guru99 Global Event</h1> <div ng-app="DemoApp" ng-controller="DemoController"> <table> <tr ng-repeat="ptutor in tutorial"> <td>{{ptutor.Name}}</td> <td>{{ptutor.Description}}</td> </tr> </table> </div> <script type="text/javascript"> var app = angular.module('DemoApp',[]); app.controller('DemoController',function($scope) { $scope.tutorial = [ {Name:"Controllers",Description :"Controllers in action"}, {Name:"Models",Description :"Models and binding data"}, {Name:"Directives",Description :"Flexibility of Directives"} ]}); </script> </body> </html>
⚠️ Advertencia: Este listado se reproduce exactamente como se publicó, y cuatro de sus líneas son erróneas. chrset errores ortográficos charsetSe cargan tres compilaciones de AngularJS a la vez, lo cual es una de más. lib/bootstrap.js y lib/bootstrap.css no existen. Mantener angular.min.js solamente.
Code Explicación
- Primero, creamos una variable llamada "tutorial" y le asignamos algunos pares clave-valor en un solo paso. Cada par clave-valor se utilizará como datos al mostrar la tabla. Luego, la variable del tutorial se asigna al objeto de alcance para que se pueda acceder a él desde nuestra vista.
- Este es el primer paso para crear una tabla y usamos la etiqueta .
- Para cada fila de datos, utilizamos la "directiva ng-repeat". Esta directiva revisa cada par clave-valor en el objeto de alcance del tutorial utilizando la variable ptutor.
- Finalmente, estamos usando el etiqueta junto con los pares clave-valor (ptutor.Name y ptutor.Descriptión) para mostrar los datos de la tabla de AngularJS.
Si el código se ejecuta correctamente, se mostrará la siguiente salida cuando ejecute el código en el navegador.
Resultado
Del resultado anterior,
- Podemos ver que la tabla se muestra correctamente con los datos del conjunto de pares clave-valor definidos en el controlador.
- Los datos de la tabla se generaron revisando cada uno de los pares clave-valor utilizando la "directiva ng-repeat".
Las filas sin procesar son solo el punto de partida, ya que los filtros deciden cómo se ordenan y formatean esas filas.
Filtro incorporado de AngularJS
Es muy común utilizar los filtros incorporados en AngularJS para cambiar la forma en que se muestran los datos en las tablas. Ya hemos visto filtros en acción en un capítulo anterior. Hagamos un resumen rápido de los filtros antes de continuar.
En AngularJS, los filtros se utilizan para formatear el valor de una expresión antes de mostrarla al usuario. Un ejemplo de filtro es el filtro 'uppercase', que toma una cadena de texto como salida, la formatea y muestra todos los caracteres en mayúsculas.
Entonces, en el siguiente ejemplo, si el valor de la variable 'TutorialName' es 'AngularJS', el resultado de la siguiente expresión será 'ANGULARJS'.
{{ TutorialName | uppercase }}
En esta sección, veremos con más detalle cómo se pueden usar los filtros ordenar por y mayúsculas en las tablas.
Filtros comunes de AngularJS utilizados con tablas
La tabla que aparece a continuación compara los filtros que se utilizan con mayor frecuencia dentro de una expresión ng-repeat.
| Filtrar | Propósito | Ejemplo |
|---|---|---|
| ordenar por | Ordena las filas por una clave. | | orderBy : 'Name' |
| filtrar | Mantiene las filas coincidentes | | filter : searchText |
| mayúsculas | Pon en mayúsculas el texto | | uppercase |
| minúsculas | Texto inferior | | lowercase |
| limitarA | Recuento de filas de mayúsculas | | limitTo : 25 |
| moneda | Formatos de dinero | | currency : '$' |
| datos | Formatos de fechas | | date : 'dd MMM yyyy' |
| número | Establece decimales | | number : 2 |
La ordenación es el filtro que los lectores solicitan en primer lugar, por lo que el filtro orderBy viene a continuación.
Ordenar tabla con filtro Ordenar por
Este filtro se utiliza para ordenar la tabla según una de sus columnas. En el ejemplo anterior, el resultado de los datos de nuestra tabla AngularJS se mostró como se indica a continuación.
| Control | Controladores en acción |
| Modelos | Modelos y datos vinculantes. |
| instrucciones | Flexibilidad de las directivas |
Veamos un ejemplo de cómo podemos usar el filtro "orderBy" y ordenar los datos de la tabla de AngularJS usando la primera columna de la tabla.
<!DOCTYPE html> <html> <head> <meta chrset="UTF 8"> </head> <body> <title>Event Registration</title> <style> table,th,td{ border: 1px solid grey; padding:5px; } </style> <script src="https://code.angularjs.org/1.6.9/angular-route.js"></script> <script src="https://code.angularjs.org/1.6.9/angular.min.js"></script> <script src="https://code.angularjs.org/1.6.9/angular.js"></script> <script src="lib/bootstrap.js"></script> <script src="lib/bootstrap.css"></script> <h1> Guru99 Global Event</h1> <div ng-app="DemoApp" ng-controller="DemoController"> <table> <tr ng-repeat="ptutor in tutorial | orderBy : 'Name'"> <td>{{ptutor.Name}}</td> <td>{{ptutor.Description}}</td> </tr> </table> </div> <script type="text/javascript"> var app = angular.module('DemoApp',[]); app.controller('DemoController',function($scope) { $scope.tutorial = [ {Name:"Controllers",Description :"Controllers in action"}, {Name:"Models",Description :"Models and binding data"}, {Name:"Directives",Description :"Flexibility of Directives"} ]}); </script> </body> </html>
Code Explicación
- Estamos usando el mismo código que usamos para crear nuestra tabla, la única diferencia esta vez es que estamos usando el filtro "orderBy" junto con la directiva ng-repeat. En este caso estamos diciendo que queremos ordenar la tabla por la clave “Nombre”.
Si el código se ejecuta correctamente, se mostrará la siguiente salida cuando ejecute el código en el navegador.
Resultado
Desde la salida,
- Podemos ver que los datos en la tabla de AngularJS se han ordenado según los datos de la primera columna. El array se declara en el orden Controladores, Modelos, Directivas, por lo que sin un filtro las filas aparecen en ese orden. Aplicando
orderBy : 'Name'ordena los valores de Nombre alfabéticamente, lo que coloca las Directivas por delante de los Modelos y produce Controladores, Directivas, Modelos.
ordenar en Reverse y de los encabezados de columna
El filtro orderBy acepta un segundo argumento. Pasar true invierte la dirección y almacenar tanto la clave como esa bandera en el ámbito permite a un lector reordenar la tabla haciendo clic en un encabezado, como el ordenar por referencia describe
<table> <tr> <th ng-click="sortKey='Name'; reverse=!reverse">Name</th> <th ng-click="sortKey='Description'; reverse=!reverse">Description</th> </tr> <tr ng-repeat="ptutor in tutorial | orderBy : sortKey : reverse"> <td>{{ptutor.Name}}</td> <td>{{ptutor.Description}}</td> </tr> </table>
El ordenamiento modifica la secuencia de las filas. El siguiente filtro cambia la forma en que se lee una sola columna.
Tabla de visualización con filtro de mayúsculas
También podemos usar el filtro de mayúsculas para cambiar los datos de la tabla de AngularJS a mayúsculas.
Echemos un vistazo a un ejemplo de cómo podemos lograrlo.
<!DOCTYPE html> <html> <head> <meta chrset="UTF 8"> </head> <body> <title>Event Registration</title> <style> table,th,td{ border: 1px solid grey; padding:5px; } </style> <script src="https://code.angularjs.org/1.6.9/angular-route.js"></script> <script src="https://code.angularjs.org/1.6.9/angular.min.js"></script> <script src="https://code.angularjs.org/1.6.9/angular.js"></script> <script src="lib/bootstrap.js"></script> <script src="lib/bootstrap.css"></script> <h1> Guru99 Global Event</h1> <div ng-app="DemoApp" ng-controller="DemoController"> <table> <tr ng-repeat="ptutor in tutorial"> <td>{{ptutor.Name | uppercase}}</td> <td>{{ptutor.Description}}</td> </tr> </table> </div> <script type="text/javascript"> var app = angular.module('DemoApp',[]); app.controller('DemoController',function($scope) { $scope.tutorial = [ {Name:"Controllers",Description :"Controllers in action"}, {Name:"Models",Description :"Models and binding data"}, {Name:"Directives",Description :"Flexibility of Directives"} ]}); </script> </body> </html>
Code Explicación
- Estamos usando el mismo código que usamos para crear nuestra tabla, la única diferencia esta vez es que estamos usando el filtro de mayúsculas. Estamos utilizando este filtro junto con "ptutor.Name" para que todo el texto de la primera columna se muestre en mayúsculas.
Si el código se ejecuta correctamente, se mostrará la siguiente salida cuando ejecute el código en el navegador.
Resultado
Desde la salida,
- Podemos ver que al usar el filtro “mayúsculas”, todos los datos de la primera columna se muestran con caracteres en mayúscula.
Dar formato a una columna es útil, y los lectores a menudo desean que aparezca el número de fila junto a ella.
Mostrar el índice de la tabla ($index)
Para mostrar el índice de la tabla, agregue un con $index.
Echemos un vistazo a un ejemplo de cómo podemos lograrlo.
<!DOCTYPE html> <html> <head> <meta chrset="UTF 8"> </head> <body> <title>Event Registration</title> <style> table,th,td{ border: 1px solid grey; padding:5px; } </style> <script src="https://code.angularjs.org/1.6.9/angular-route.js"></script> <script src="https://code.angularjs.org/1.6.9/angular.min.js"></script> <script src="https://code.angularjs.org/1.6.9/angular.js"></script> <script src="lib/bootstrap.js"></script> <script src="lib/bootstrap.css"></script> <h1> Guru99 Global Event</h1> <div ng-app="DemoApp" ng-controller="DemoController"> <table> <tr ng-repeat="ptutor in tutorial"> <td>{{$index + 1}}</td> <td>{{ptutor.Name}}</td> <td>{{ptutor.Description}}</td> </tr> </table> </div> <script type="text/javascript"> var app = angular.module('DemoApp',[]); app.controller('DemoController',function($scope) { $scope.tutorial = [ {Name:"Controllers",Description :"Controllers in action"}, {Name:"Models",Description :"Models and binding data"}, {Name:"Directives",Description :"Flexibility of Directives"} ]}); </script> </body> </html>
Code Explicación
- Estamos usando el mismo código que usamos para crear nuestra tabla, la única diferencia esta vez es que estamos agregando una fila adicional a nuestra tabla para mostrar la columna de índice. En esta columna adicional, estamos usando la propiedad "$index" proporcionado por AngularJS y luego usando el operador +1 para incrementar el índice de cada fila.
Si el código se ejecuta correctamente, se mostrará la siguiente salida cuando ejecute el código en el navegador.
Resultado
Desde la salida,
- Puede ver que se ha creado una columna adicional. En esta columna, podemos ver los índices que se crean para cada fila.
En una pantalla caben tres filas. Un conjunto de datos real no cabe, por lo que los lectores necesitan una forma de buscar en él.
Cómo filtrar y buscar datos de tablas en AngularJS
AngularJS incluye un filtro llamado filterColocado después de ng-repeat, compara cada elemento del array con un valor y conserva solo las filas que coinciden. Al vincular ese valor a un cuadro de texto con ng-model, la tabla se reduce automáticamente mientras el lector escribe, sin necesidad de un controlador de eventos ni de código del controlador.
Agregar una búsqueda en vivo Box
Agrega un campo de entrada encima de la tabla y pasa el array a través del filtro. Ambos comparten la misma propiedad de ámbito, por lo que AngularJS reevalúa la expresión con cada pulsación de tecla.
<input type="text" ng-model="searchText" placeholder="Search topics"> <table> <tr ng-repeat="ptutor in tutorial | filter : searchText"> <td>{{ptutor.Name}}</td> <td>{{ptutor.Description}}</td> </tr> </table>
Code Explicación:
- La entrada escribe lo que se teclea
searchTexten el alcance. filter : searchTextmantiene filas cuyo Nombre o Description contiene esa subcadena, sin tener en cuenta las mayúsculas y minúsculas.- Para buscar en una sola columna, pase un objeto:
filter : {Name : searchText}. - Cadena de filtros, por lo tanto
| filter : searchText | orderBy : 'Name'Primero realiza la búsqueda y luego clasifica a los supervivientes.
Mantener las mesas grandes adaptables
Un problema común que se presenta durante el desarrollo con tablas de AngularJS es un conjunto de datos grande que contiene mil filas o más. ng-repetir La directiva crea un ámbito y un observador por fila, por lo que la página puede dejar de responder. En su lugar, distribuya las filas entre páginas y agregue track by De esta forma, las filas existentes se reutilizan en lugar de reconstruirse.
<tr ng-repeat="ptutor in tutorial | filter : searchText | limitTo : 25 track by ptutor.Name">










