Expresiones de AngularJS: Array, Objetos, $eval, Cadenas
⚡ Resumen inteligente
Las expresiones de AngularJS son fragmentos de código que se colocan entre llaves dobles y que vinculan datos directamente a una plantilla. Evalúan números, cadenas, objetos y matrices, y la función $eval realiza la misma evaluación desde dentro de un controlador.
¿Qué son las expresiones de AngularJS?
Las expresiones son variables escritas entre llaves dobles. {{ }}Son muy comunes en AngularJS y aparecen a lo largo de los tutoriales anteriores de esta serie.
⚠️ Aviso de soporte: AngularJS alcanzó fin de vida el 31 de diciembre de 2021 y no recibe más parches ni correcciones de seguridad. La sintaxis que se muestra a continuación sigue siendo válida para el mantenimiento de las aplicaciones AngularJS 1.x existentes; los nuevos proyectos deben usar la sintaxis moderna. Angular, donde aún existen llaves de interpolación pero ng-init y $eval no haga.
Explicación de expresiones de AngularJS con un ejemplo
Las expresiones de AngularJS se escriben dentro de llaves dobles, como en {{expression}}.
Sintaxis: un ejemplo sencillo de una expresión es {{5 + 6}}.
Las expresiones de AngularJS vinculan los datos al HTML de la misma manera que la directiva ng-bind, y AngularJS muestra los datos exactamente donde se coloca la expresión.
En este ejemplo mostramos una simple suma de números como una expresión.
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Event Registration</title> </head> <body> <script src="https://code.angularjs.org/1.8.3/angular.min.js"></script> <h1>Guru99 Global Event</h1> <div ng-app=""> Addition : {{6+9}} </div> </body> </html>
Code Explicación:
- La directiva ng-app está vacía, lo que significa que ningún módulo proporciona controladores, directivaso servicios a esta página.
- Una expresión simple suma dos números.
Salida:
Se realiza la suma de 9 y 6 y se muestra el resultado, 15.
AngularJS Numbers
Las expresiones trabajan con números. Este ejemplo multiplica dos variables numéricas, margin y profity muestra el producto.
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Event Registration</title> </head> <body> <script src="https://code.angularjs.org/1.8.3/angular.min.js"></script> <h1>Guru99 Global Event</h1> <div ng-app="" ng-init="margin=2;profit=200"> Total profit margin {{margin*profit}} </div> </body> </html>
Code Explicación:
- La directiva ng-init define variables y sus valores en la propia vista, de forma muy similar a como las variables locales en cualquier lenguaje de programación. aquí
marginyprofitson declarados y asignados. - La expresión multiplica entonces esas dos variables locales.
Salida:
Se realiza la multiplicación de 2 por 200 y se muestra el producto, 400.
Cadenas AngularJS
Las expresiones también funcionan con cadenas. Este ejemplo define firstName y lastName y muestra ambos.
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Event Registration</title> </head> <body> <script src="https://code.angularjs.org/1.8.3/angular.min.js"></script> <h1>Guru99 Global Event</h1> <div ng-app="" ng-init="firstName='Guru';lastName='99'"> First Name : {{firstName}}<br> Last Name : {{lastName}} </div> </body> </html>
Code Explicación:
- La directiva ng-init define
firstNamecon el valor “Guru"YlastNamecon el valor “99”. - Las expresiones
{{firstName}}y{{lastName}}Lee esas variables y muéstralas en la vista.
Salida:
Ambos valores aparecen en pantalla.
Objetos de AngularJS
Las expresiones funcionan con JavaScript objetos, que consisten en pares nombre-valor. La sintaxis de un JavaEl objeto Script tiene este aspecto:
var car = {type: "Ford", model: "Explorer", color: "White"};
Este ejemplo define una person objeto que contiene dos pares clave-valor, firstName y lastName.
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Event Registration</title> </head> <body> <script src="https://code.angularjs.org/1.8.3/angular.min.js"></script> <h1>Guru99 Global Event</h1> <div ng-app="" ng-init="person={firstName:'Guru',lastName:'99'}"> First Name : {{person.firstName}}<br> Last Name : {{person.lastName}} </div> </body> </html>
Code Explicación:
- La directiva ng-init define el objeto
personcon los pares clave-valorfirstNameestablecido en “Guru"YlastNameestablecido en “99”. - Las expresiones
{{person.firstName}}y{{person.lastName}}Lee esos miembros. Como pertenecen al objeto, se requiere la notación de puntos para acceder a sus valores.
Salida:
Los valores de firstName y lastName aparecer en pantalla.
Matrices AngularJS
Las expresiones funcionan con matrices. Este ejemplo define una matriz que contiene las calificaciones de un estudiante en tres asignaturas y muestra cada valor.
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Event Registration</title> </head> <body> <script src="https://code.angularjs.org/1.8.3/angular.min.js"></script> <h1>Guru99 Global Event</h1> <div ng-app="" ng-init="marks=[1,15,19]"> Student Marks<br> Subject1 : {{marks[0]}}<br> Subject2 : {{marks[1]}}<br> Subject3 : {{marks[2]}} </div> </body> </html>
Code Explicación:
- La directiva ng-init define el array.
markscon los tres valores 1, 15 y 19. - Expresiones de la forma
marks[index]leer cada elemento.
Salida:
Se muestran las marcas definidas en la matriz.
Capacidades y limitaciones de la expresión AngularJS
Capacidades
- Las expresiones de AngularJS se parecen JavaLas expresiones de script comparten gran parte de la misma potencia y flexibilidad.
- Donde JavaEl script genera un ReferenceError o TypeError en una propiedad indefinida; la evaluación de AngularJS es indulgente y devuelve undefined o null.
- Se pueden aplicar filtros dentro de una expresión para dar formato a los datos antes de que se muestren.
- El operador ternario es compatible, por lo tanto
{{ isReady ? 'Yes' : 'No' }}es válida.
Limitaciones
- Los bucles y el manejo de excepciones no se pueden usar dentro de una expresión de AngularJS. La lógica condicional se limita al operador ternario;
ifLos extractos no están disponibles. - Las funciones no se pueden declarar dentro de una expresión, ni siquiera dentro de una directiva ng-init.
- Las expresiones regulares no se pueden crear dentro de una expresión. Una expresión regular es una combinación de símbolos y caracteres que se utilizan para hacer coincidir cadenas, como
.*\.txt$y tales literales son rechazados. - El operador coma (
,) y elvoidLos operadores no están autorizados.
ng-bind vs. llaves de expresión: ¿Cuál usar?
Double Las llaves y la directiva ng-bind producen el mismo resultado renderizado, por lo que la elección entre ellas parece arbitraria. Pero no lo es. Ambas se comportan de manera diferente justo antes de que AngularJS termine de cargar, y esa diferencia es visible para el usuario de la página.
| Aspecto | {{ expression }} | ng-bind |
|---|---|---|
| Escrito en | Contenido del elemento | Un atributo de elemento |
| Antes de que AngularJS se cargue | Los brackets sin pintar aparecen fugazmente en la pantalla. | No se muestra nada |
| Legibilidad | Más alto: el valor se sitúa en línea | Menor: el valor está oculto en un atributo. |
| Múltiples valores por elemento | Sí: | No, solo una encuadernación |
| Encuadernación única | Si con {{::value}} |
Si con ng-bind="::value" |
La breve aparición de llaves sin interpolación se conoce como destello de contenido no interpolado, y ocurre porque el navegador renderiza el marcado antes de que AngularJS lo compile. Utilice `ng-bind` o añada la directiva `ng-cloak` para el contenido visible sin necesidad de desplazarse. Las llaves siguen siendo la opción más clara y legible en cualquier otro caso, especialmente cuando aparecen varios valores dentro de un mismo elemento.
Diferencia entre expresión y $eval
El $eval La función evalúa expresiones desde dentro del controlador. Las expresiones se evalúan en la vista, mientras que $eval Se evalúa en el código del controlador.
Este ejemplo usa $eval Sumar dos números y colocar el resultado en el objeto scope para que la vista pueda mostrarlo.
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Event Registration</title> </head> <body> <script src="https://code.angularjs.org/1.8.3/angular.min.js"></script> <div ng-app="sampleApp" ng-controller="AngularController"> <h1>Guru99 Global Event</h1> {{value}} </div> <script> var sampleApp = angular.module('sampleApp', []); sampleApp.controller('AngularController', function($scope) { $scope.a = 1; $scope.b = 1; $scope.value = $scope.$eval('a+b'); }); </script> </body> </html>
Code Explicación:
- Dos variables de alcance,
ayb, cada uno tiene el valor 1. $scope.$evalevalúa su suma y asigna el resultado a la variable de alcancevalue.- La vista se muestra a continuación
value.
Salida:
La salida muestra la expresión evaluada dentro de la controlador, con la suma de las dos variables de ámbito enviadas y mostradas en la vista.













