Выражения AngularJS: массивы, объекты, $eval, строки.
⚡ Умное резюме
Выражения AngularJS — это фрагменты кода, заключенные в двойные фигурные скобки, которые напрямую связывают данные с шаблоном. Они вычисляют числа, строки, объекты и массивы, а функция `$eval` выполняет ту же самую оценку внутри контроллера.

Что такое выражения AngularJS?
Выражения — это переменные, записанные внутри двойных фигурных скобок. {{ }}Они очень часто используются в AngularJS и встречаются в предыдущих уроках этой серии.
⚠️ Уведомление службы поддержки: AngularJS достиг Прекращение поддержки 31 декабря 2021 года. и не получает дальнейших исправлений или обновлений безопасности. Приведенный ниже синтаксис остается актуальным для поддержки существующих приложений AngularJS 1.x; в новых проектах следует использовать современный синтаксис. Угловойгде интерполяционные фигурные скобки всё ещё существуют, но ng-init и $eval не.
Объясните выражения AngularJS на примере.
Выражения AngularJS записываются внутри двойных фигурных скобок, например: {{expression}}.
Синтаксис: Простой пример выражения — это {{5 + 6}}.
Выражения AngularJS связывают данные с HTML так же, как и директива ng-bind, и AngularJS отображает данные именно там, где размещено выражение.
В этом примере мы показываем простое сложение чисел в виде выражения.
<!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 Объяснение:
- Директива ng-app пуста, что означает, что ни один модуль не предоставляет контроллеры. Директивыили услуги, доступные на этой странице.
- Простое выражение складывает два числа.
Выход:
Производится сложение чисел 9 и 6, и на экране отображается результат — 15.
AngularJS Numbers
Выражения работают с числами. В этом примере происходит умножение двух числовых переменных. margin и profitи отображает продукт.
<!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 Объяснение:
- Директива ng-init определяет переменные и их значения непосредственно в представлении, подобно локальным переменным в любом другом компоненте. язык программирования, Вот
marginиprofitобъявлены и назначены. - Затем это выражение умножает эти две локальные переменные.
Выход:
Производится умножение чисел 2 и 200, и на экране отображается результат — 400.
Строки AngularJS
Выражения также работают со строками. В этом примере определено firstName и 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="firstName='Guru';lastName='99'"> First Name : {{firstName}}<br> Last Name : {{lastName}} </div> </body> </html>
Code Объяснение:
- Директива ng-init определяет
firstNameсо значением «Guru" а такжеlastNameсо значением «99». - Выражения
{{firstName}}и{{lastName}}Прочитайте эти переменные и отобразите их в представлении.
Выход:
Оба значения отображаются на экране.
Объекты AngularJS
Выражения работают с JavaСценарий Объекты, состоящие из пар «имя-значение». Синтаксис JavaОбъект скрипта выглядит следующим образом:
var car = {type: "Ford", model: "Explorer", color: "White"};
Этот пример определяет person объект, содержащий две пары ключ-значение, firstName и 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 Объяснение:
- Директива ng-init определяет объект.
personс парами ключ-значениеfirstNameустановлен в "Guru" а такжеlastNameустановить на «99». - Выражения
{{person.firstName}}и{{person.lastName}}Прочитайте значения этих элементов. Поскольку они принадлежат объекту, для получения их значений требуется точечная нотация.
Выход:
Значения firstName и lastName появиться на экране.
AngularJS Массивы
Выражения работают с массивами. В этом примере определяется массив, содержащий оценки студента по трем предметам, и отображается каждое значение.
<!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 Объяснение:
- Директива ng-init определяет массив.
marksс тремя значениями 1, 15 и 19. - Выражения формы
marks[index]Прочитайте каждый элемент.
Выход:
Отображаются отметки, заданные в массиве.
Возможности и ограничения AngularJS Expression
Обработка и услуги
- Выражения AngularJS напоминают JavaСкриптовые выражения обладают схожей мощностью и гибкостью.
- где JavaВ скрипте возникает ошибка ReferenceError или TypeError при обнаружении неопределенного свойства, в AngularJS же оценка корректна и возвращает undefined или null.
- Фильтры можно применять внутри выражения для форматирования данных перед их отображением.
- Тройной оператор поддерживается, поэтому
{{ isReady ? 'Yes' : 'No' }}действует.
Ограничения
- Циклы и обработка исключений не могут использоваться внутри выражений AngularJS. Условная логика ограничена тернарным оператором;
ifЗаявления недоступны. - Функции нельзя объявлять в выражении, даже внутри директивы ng-init.
- Регулярные выражения нельзя создать внутри выражения. Регулярное выражение — это комбинация символов и знаков, используемая для сопоставления строк, например:
.*\.txt$и подобные буквальные конструкции отвергаются. - Оператор запятой (
,) иvoidОператорам вход воспрещен.
ng-bind против фигурных скобок: что использовать?
Double Использование фигурных скобок и директивы ng-bind приводит к одинаковому результату рендеринга, поэтому выбор между ними кажется произвольным. Но это не так. Они ведут себя по-разному в момент до завершения загрузки AngularJS, и эта разница видна пользователю страницы.
| Аспект | {{ expression }} | ng-bind |
|---|---|---|
| Написано в | Содержимое элемента | Атрибут элемента |
| Перед загрузкой AngularJS | На экране мелькают необработанные скобки. | Ничего не показано |
| читабельность | Чем выше значение, тем оно остается на прежнем уровне. | Меньшее значение — скрыто в атрибуте. |
| Несколько значений на элемент | Да | Нет, только одно крепление. |
| Одноразовое переплетное соединение | Да, с {{::value}} |
Да, с ng-bind="::value" |
Кратковременное появление необработанных фигурных скобок известно как «вспышка неинтерполированного контента», и это происходит потому, что браузер отображает разметку до того, как AngularJS её скомпилирует. Используйте ng-bind или добавьте директиву ng-cloak для контента, видимого в верхней части страницы. Фигурные скобки остаются более понятным и читаемым вариантом везде, особенно там, где несколько значений находятся внутри одного элемента.
Разница между выражением и $eval
$eval Функция вычисляет выражения внутри контроллера. Выражения вычисляются в представлении, тогда как $eval Выполняется в коде контроллера.
В этом примере используется $eval чтобы сложить два числа и поместить результат в объект области видимости, чтобы представление могло его отобразить.
<!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 Объяснение:
- Две переменные области видимости,
aиbКаждый из них имеет значение 1. $scope.$evalвычисляет их сумму и присваивает результат переменной области видимости.value.- Затем отображается следующее:
value.
Выход:
В результате выполнения отображается выражение, вычисленное внутри функции. контроллерСумма двух переменных области видимости передается и отображается в представлении.












