Это все примеры сервисов, которые помогают в рендеринге представлений AngularJS (хотя $parse
и $interpolate
могут использоваться за пределами этого домена). Чтобы проиллюстрировать роль каждого сервиса, давайте возьмем пример этого фрагмента HTML:
var imgHtml = '<img ng-src="/path/{{name}}.{{extension}}">'
и значения в области:
$scope.name = 'image';
$scope.extension = 'jpg';
Учитывая эту разметку, вот что каждый сервис приносит на стол:
$compile
- он может взять всю разметку и превратить ее в функцию связывания, которая при выполнении в определенной области преобразует фрагмент текста HTML в динамический DOM со всеми директивами (здесь ng-src
:), реагирующими на изменения модели. Можно вызвать его следующим образом: $ compile (imgHtml) ($ scope) и получить в результате элемент DOM со всеми границами событий DOM. $compile
использует $interpolate
(среди прочего), чтобы сделать свою работу.
$interpolate
знает , как обрабатывать строку со встроенными интерполяционных выражений, напр .: /path/{{name}}.{{extension}}
. Другими словами, он может взять строку с выражениями интерполяции, область видимости и превратить ее в результирующий текст. Можно думать о $interpolation
сервисе как об очень простом, основанном на строках языке шаблонов. Учитывая приведенный выше пример, можно использовать этот сервис, например: $interpolate("/path/{{name}}.{{extension}}")($scope)
получить path/image.jpg
строку в результате.
$parse
используется $interpolate
для оценки отдельных выражений ( name
, extension
) в контексте. Он может использоваться как для чтения, так и для установки значений для данного выражения. Например, чтобы оценить name
выражение, нужно сделать: $parse('name')($scope)
получить значение «изображение». Чтобы установить значение, нужно сделать:$parse('name').assign($scope, 'image2')
Все эти службы работают вместе, чтобы обеспечить живой интерфейс в AngularJS. Но они работают на разных уровнях:
$parse
касается только отдельных выражений ( name
, extension
). Это сервис чтения-записи.
$interpolate
только для чтения и касается строк, содержащих несколько выражений ( /path/{{name}}.{{extension}}
)
$compile
находится в центре машин AngularJS и может превращать строки HTML (с директивами и выражениями интерполяции) в живой DOM.
pkozlowski.opensource
источник
$interpolate
в AnjularJS, и, наконец, я получил компактный и информативный ответ.$ interpolate не имеет доступа для записи к переменным $ scope, как у нас в $ eval и $ parse
$ parse, $ interpolate ---> должен быть введен, но нет необходимости вводить $ eval в контроллер или где он используется
$ parse, $ interpolate дают функцию, которая может быть оценена по любому контексту, но $ eval всегда оценивается по $ scope.
$ eval и $ interpolate за кадром используют только $ parse.
источник
Вот милое объяснение.
источник