Są to wszystkie przykłady usług, które pomagają w renderowaniu widoku AngularJS (chociaż $parse
i $interpolate
mogą być używane poza tą domeną). Aby zilustrować rolę każdej usługi, weźmy przykład tego fragmentu HTML:
var imgHtml = '<img ng-src="/path/{{name}}.{{extension}}">'
i wartości w zakresie:
$scope.name = 'image';
$scope.extension = 'jpg';
Biorąc pod uwagę ten znacznik tutaj, każda usługa przynosi tabeli:
$compile
- może zająć cały znacznik i przekształcić go w funkcję łączenia, która po wykonaniu w określonym zakresie zamieni kawałek tekstu HTML w dynamiczną, żywą DOM z wszystkimi dyrektywami (tutaj ng-src
:) reagującymi na zmiany modelu. Można by je wywołać w następujący sposób: $ compile (imgHtml) ($ scope) i w wyniku tego uzyskać element DOM ze wszystkimi granicami zdarzenia DOM. $compile
wykorzystuje $interpolate
(między innymi) swoją pracę.
$interpolate
umie przetwarzać ciąg znaków za pomocą osadzonych wyrażeń interpolacyjnych, np /path/{{name}}.{{extension}}
.: Innymi słowy, może wziąć ciąg z wyrażeniami interpolacyjnymi, zasięg i zamienić go w wynikowy tekst. Można myśleć o $interpolation
usłudze jako o bardzo prostym języku szablonów opartym na łańcuchach znaków. Biorąc pod uwagę powyższy przykład, można użyć tej usługi, takiej jak: w $interpolate("/path/{{name}}.{{extension}}")($scope)
celu otrzymania path/image.jpg
ciągu.
$parse
służy $interpolate
do oceny poszczególnych wyrażeń ( name
, extension
) względem zakresu. Można go używać zarówno do odczytu, jak i ustawiania wartości dla danego wyrażenia. Na przykład, aby ocenić name
wyrażenie, należy zrobić: $parse('name')($scope)
uzyskać wartość „image”. Aby ustawić wartość, należy:$parse('name').assign($scope, 'image2')
Wszystkie te usługi współpracują w celu zapewnienia interfejsu użytkownika na żywo w AngularJS. Ale działają na różnych poziomach:
$parse
dotyczy tylko poszczególnych wyrażeń ( name
, extension
). Jest to usługa do odczytu i zapisu.
$interpolate
jest tylko do odczytu i dotyczy ciągów zawierających wiele wyrażeń ( /path/{{name}}.{{extension}}
)
$compile
jest sercem maszyny AngularJS i może przekształcać ciągi HTML (z dyrektywami i wyrażeniami interpolacyjnymi) w działający DOM.
pkozlowski.opensource
źródło
$interpolate
w AnjularJS, i wreszcie otrzymałem zwięzłą i pouczającą odpowiedź.$ interpolate nie ma dostępu do zapisu do zmiennych $ scope, podobnie jak w $ eval i $ parsowaniu
$ parsować, $ interpolować ---> należy wstrzyknąć, ale $ eval nie trzeba wstrzykiwać do kontrolera lub tam, gdzie jest on używany
$ parsuj, $ interpoluj daje funkcję, która może być oceniana w dowolnym kontekście, ale $ eval jest zawsze oceniana względem $ scope.
$ eval i $ interpoluj za sceną używa tylko $ parsowania.
źródło
Oto słodkie wyjaśnienie.
źródło