Любые идеи о том, где использовать $parse
от AngularJS.
Просьба привести любые примеры или ссылки, которые изложены четко.
Любые идеи о том, где использовать $parse
от AngularJS.
Просьба привести любые примеры или ссылки, которые изложены четко.
Угловые пробеги $ анализируются автоматически, когда он запускает цикл $ digest, в основном $ parse - это способ углового вычисления выражений. Если вы хотите вручную разобрать выражение, вы можете ввести службу parse pars в контроллер и вызвать службу, чтобы выполнить синтаксический анализ.
Вот код, перекопанный из ng-книги, который затем обрабатывает выражение.
<div ng-controller="MyCtrl">
<input ng-model="expr" type="text" placeholder="Enter an expression" />
<h2>{{ parsedValue }}</h2>
</div>
то в нашем модуле,
angular.module("myApp", [])
.controller('MyCtrl',['$scope', '$parse', function($scope, $parse) {
$scope.$watch('expr', function(newVal, oldVal, scope) {
if (newVal !== oldVal) {
// Let's set up our parseFun with the expression
var parseFun = $parse(newVal);
// Get the value of the parsed expression
$scope.parsedValue = parseFun(scope);
}
});
}]);
Ницца. У меня есть небольшой, несвязанный вопрос. Почему вы проверяете, что newVal! == oldVal? Не Угловая автоматически не запускает функцию обратного вызова $ watch, если значение не изменилось, гарантируя тем самым, что newVal и oldVal отличаются тем, как выполняется внутренняя часть функции? –
@NikoBellic: Да. Большую часть времени. :) Когда запускается представление и выполняется первый дайджест, вначале наблюдаются выражения для углового, чтобы сохранить начальное значение для сравнения с последующим. И этот первый вызов имеет одинаковое значение. Оператор 'if' гарантирует, что мы проигнорируем этот первый первоначальный вызов, когда изменение еще не произошло. –
Я очень опаздываю на вечеринку - просто FYI, пожалуйста, используйте этот пример только в примерах приложений. Обсуждает ли в ng-книге реализацию безопасности этого? https://plnkr.co/edit/5QICUyBPYC2Iac2dt1XG?p=preview введите полезную нагрузку a = toString(). constructor.prototype; a.charAt = a.trim; $ eval ('a, alert (1), a') непосредственный разбор пользовательского ввода вызовет проблемы безопасности. – Lewis
Вы, вероятно, не будете использовать $ parse напрямую, но это то, что преобразует угловые expressions в функции JavaScript. Выражения представляют собой фрагменты кода, подобные JavaScript, которые обычно помещаются в привязки, такие как {{ expression }}
.
вы просто разместить угловую документация $ разобрать ваш вопрос? – Claies
да, опубликуйте его, чтобы понять, что это значит – rinesh
Пример того, когда требуется '$ parse': http://stackoverflow.com/a/15725402/215945 –