Выражения представляют собой фрагменты кода, похожие на JavaScript, обычно помещаются в связанную область (например, {{Expression}}). Выражения анализируются и выполняются через службу $ parse (http://code.angularjs.org/1.0.2/docs/api/ng.$parse).
Например, следующие приведены достоверные выражения в угловой:
1. угловая экспрессия против экспрессии JS
Людям легко связать выражение углового представления как выражение JavaScript, но это не совсем правильно, потому что Angular не оценивает выражение через eval () javaScript (). Вы можете придумать угловое выражение как выражение JavaScript со следующими различиями:
С другой стороны, если мы хотим выполнить произвольный код JavaScript (в угловом выражении), мы можем записать этот код в один из методов контроллера и вызвать его. Если мы хотим оценить () угловое выражение в JavaScript, мы можем использовать метод $ eval ().
<! Doctype html> <html lang = "zh-cn" ng-app = "ExpressTest"> <Head> <meta charset = "utf-8"> <Title> Expressy-E1 </title> <style type = "text/css"> .ng-cloak {display: none; } </style> </head> <body ng-controller = "myctrl"> 1 + 2 = {{1 + 2}} <br/> выражение: <input type = "ng-model =" expr "/> <buttone ng-click =" addexp (expr) "> revize </button> <ul> <li ng-repeat =" expr "expr"> ng-click = "removeExp ($ index)" href = ""> x </a>] <tt> {{expr}} </tt> => <span ng-bind = "$ parent. $ eval (expr)"> </span> </li> </ul> <script src = "../ angular-1.0.1.js" type = "text/javascript"> </script> <script type = "text/javascript"> var app = angular.module ("ExpressySt", []); app.controller ("myctrl", function ($ scope) {var exprs = $ scope.exprs = []; $ scope.expr = "3*10 | currance"; $ scope.addexp = function (expr) {exprs.push (expr);}; }); </script> </body> </html>2. Оценка собственности
Контекст среды подножия углового выражения - это область применения, в то время как JavaScript - это окно (он должен ссылаться на строгий режим Evel) и угловые потребности для доступа к объекту Global Window через окно $. Например, если нам нужно вызовать Alert (), определенное на окне, в выражении, нам нужно использовать $ window.alert (). Это предназначено для того, чтобы избежать случайного доступа к глобальному состоянию (общий источник тонких ошибок).
<! Doctype html> <html lang = "zh-cn" ng-app = "Propertyevaluation"> <Head> <meta charset = "utf-8"> <Title> PropertyEvaluation </title> <style type = "text/css"> .ng-cloak {display: none; } </style> </head> <body> <div ng-controller = "myctrl"> name: <input ng-model = "name" type = "text"/> <button ng-click = "greet ()"> greet </button> </div> <script src = "../ angular-1.0.1.js" type = "text/javascript"> var app = angular.module ("PropertyEvaluation", []); app.controller ("myctrl", function ($ scope, $ window) {$ scope.name = "kitty"; $ scope.greet = function () {$ window.alert ("hello" + $ scope.name);};}); </script> </body> </html>3.
Оценка выражения прощает неопределенную и нулевую. В JavaScript, когда A не является объектом, оцените ABC, будет брошено исключение. Иногда это разумно для общих языков, а оценка экспрессии в основном используется для привязки данных, а общая форма выглядит следующим образом:
{{abc}}
Если A не существует, ни один дисплей не кажется более разумным, чем бросить исключение (если мы не ждем ответа сервера, который будет определяться за короткое время). Если выражение недостаточно терпимо при оценке, то мы пишем код привязки так запутанно:
{{((a || {}). B || {}). C}} // Это ...
Точно так же, при ссылке на функцию abc (), если она не определена или нулевая, то просто возвращается не определен.
4. Нет операторов управления потоком
Мы не можем написать операторы управления процессом в выражениях. Причина этого заключается в том, что основная система угловой состоит в том, что логика применения должна быть в контроллере (область применения), а не в представлении. Если нам нужно добавить условные ветви, петли или исключения, в выражение представления, мы можем вместо этого делегировать метод JavaScript (вы можете вызвать метод в области объема).
5. Фильтры
Когда мы представляем данные пользователям, нам может потребоваться преобразовать данные из исходного формата в дружественный (очень читаемый) формат. Например, у нас есть объект данных, который необходимо отформатировать на основе региона, прежде чем отображаться пользователю. Мы можем передать выражения серии фильтров, таких как:
имя | пропусков
Этот оценщик выражения может просто передать значение имени в прописное фильтр.
Цепные фильтры используют этот синтаксис:
значение | Filter1 | Фильтр2
Мы также можем перенести параметры, разделенные Colons на фильтры, например, отображая 123 в двух десятичных значениях:
123 | номер: 2
6. Префикс "$"
Мы можем найти это странным, в чем смысл префикса "$"? Это простой префикс (предотвращающий конфликты), используемый угловым, для дифференциации его имени API от других API. Если Angular не использует $, то оценка A.Length () вернет неопределенную. Потому что ни ни ни угло, ни угло не определяют это свойство.
Учитывая, что будущие версии Angular могут выбрать увеличение длины, это изменит поведение этого выражения. Хуже всего то, что мы, разработчики, могли бы создать свойство длины, которое затем вступит в конфликт с Angular. Эта проблема существует, потому что Angular расширяет существующий объект, добавляя методы. Добавив префикс «$», Angular сохраняет определенное пространство имен, поэтому угловые разработчики и разработчики, использующие Angular, могут жить в гармонии.