Ответ 1
Это все примеры служб, которые помогают в рендеринге 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-строки (с директивами и интерполяционными выражениями) в live DOM.