Spec-Zone.ru › Angular.js 1.2

Улучшить эту документациюВыражения Angular

Выражения Angular — это похожие на JavaScript фрагменты кода, которые обычно размещаются в привязках, таких как {{ expression }}.

Например, следующие выражения допустимы в Angular:

  • 1+2
  • a+b
  • user.name
  • items[index]

Выражения Angular по сравнению с выражениями JavaScript

Выражения Angular похожи на выражения JavaScript с следующими отличиями:

  • Контекст: Выражения JavaScript оцениваются относительно глобального window. В Angular выражения оцениваются относительно объекта scope.

  • Прощение ошибок: В JavaScript попытка оценить неопределённые свойства вызывает ReferenceError или TypeError. В Angular оценка выражений прощает undefined и null.

  • Отсутствие операторов управления потоком: В выражении Angular нельзя использовать следующие элементы: условные операторы, циклы или исключения.

  • Отсутствие объявления функций: В выражении Angular нельзя объявлять функции. Даже внутри директивы ng-init

  • Отсутствие создания регулярных выражений с помощью литералов: Вы не можете создать регулярные выражения в выражении Angular.

  • Отсутствие операторов запятой и void: В выражении Angular нельзя использовать , или void.

  • Фильтры: В выражениях можно использовать фильтры, чтобы отформатировать данные перед их отображением.

Если вам нужно выполнить более сложный код JavaScript, сделайте его методом контроллера и вызовите метод из представления. Если вы хотите eval() выражение Angular самостоятельно, используйте метод $eval().

Вы можете попробовать оценить различные выражения здесь:

Контекст

Angular не использует JavaScript's eval() для оценки выражений. Вместо этого служба $parse Angular обрабатывает эти выражения.

Выражения Angular не имеют доступа к глобальным переменным, таким как window, document или location. Это ограничение является намеренным. Оно предотвращает случайный доступ к глобальному состоянию — частому источнику скрытых ошибок.

Вместо этого используйте такие службы, как $window и $location в функциях, вызываемых из выражений. Такие службы обеспечивают доступ к глобальным переменным, который можно имитировать.

Прощение ошибок

Оценка выражений прощает неопределённые и нулевые значения. В JavaScript оценка a.b.c вызывает исключение, если a не является объектом. Хотя это имеет смысл для универсального языка, оценка выражений в основном используется для привязки данных, которая часто выглядит так:

{{a.b.c}}

Более логично отображать ничего, чем генерировать исключение, если a не определено (возможно, мы ждём ответа сервера, и оно скоро станет определённым). Если бы оценка выражений не была прощающей, нам пришлось бы писать привязки, которые захламляют код, например: {{((a||{}).b||{}).c}}

Аналогично, вызов функции a.b.c() на undefined или null просто возвращает undefined.

Отсутствие операторов управления потоком

Помимо условного оператора (a ? b : c), в выражении нельзя писать операторы управления потоком. Причина этого в основе философии Angular, согласно которой логика приложения должна находиться в контроллерах, а не в представлениях. Если вам нужен реальный условный оператор, цикл или нужно сгенерировать исключение из выражения представления, делегируйте это методу JavaScript.

Отсутствие объявления функций или создания регулярных выражений с помощью литералов

Вы не можете объявлять функции или создавать регулярные выражения внутри выражений AngularJS. Это делается для избежания сложной логики преобразования модели внутри шаблонов. Такая логика лучше размещается в контроллере или в специальном фильтре, где её можно должным образом протестировать.

$event

Директивы, такие как ngClick и ngFocus экспонируют объект $event в области действия этого выражения.

Обратите внимание в примере выше, как мы можем передать $event в clickMe, но как это не отображается в {{$event}}. Это происходит потому, что $event находится вне области действия этой привязки.

© 2010–2017 Google, Inc.
Licensed under the Creative Commons Attribution License 4.0.
https://code.angularjs.org/1.2.32/docs/guide/expression

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API