Ce sont tous des exemples de services qui facilitent le rendu des vues AngularJS (bien que $parse
et $interpolate
puissent être utilisés en dehors de ce domaine). Pour illustrer le rôle de chaque service, prenons l'exemple de ce morceau de HTML:
var imgHtml = '<img ng-src="/path/{{name}}.{{extension}}">'
et valeurs sur la portée:
$scope.name = 'image';
$scope.extension = 'jpg';
Compte tenu de ce balisage, voici ce que chaque service apporte à la table:
$compile
- il peut prendre tout le balisage et le transformer en une fonction de liaison qui, lorsqu'elle est exécutée sur une certaine portée, transformera un morceau de texte HTML en DOM dynamique et dynamique avec toutes les directives (ici ng-src
:) réagissant aux changements de modèle. On l'appellerait comme suit: $ compile (imgHtml) ($ scope) et obtiendrait un élément DOM avec toutes les limites d'événement DOM en conséquence. $compile
utilise $interpolate
(entre autres) pour faire son travail.
$interpolate
sait traiter une chaîne avec des expressions d'interpolation imbriquées, ex /path/{{name}}.{{extension}}
. : . En d'autres termes, il peut prendre une chaîne avec des expressions d'interpolation, une portée et la transformer en texte résultant. On peut considérer le $interpolation
service comme un langage de modèle très simple basé sur des chaînes. Compte tenu de l'exemple ci-dessus, on utiliserait ce service comme: $interpolate("/path/{{name}}.{{extension}}")($scope)
pour obtenir lepath/image.jpg
chaîne en conséquence.
$parse
est utilisé par $interpolate
pour évaluer des expressions individuelles ( name
, extension
) par rapport à une portée. Il peut être utilisé à la fois pour lire et définir des valeurs pour une expression donnée. Par exemple, pour évaluer l' name
expression, on ferait: $parse('name')($scope)
pour obtenir la valeur "image". Pour définir la valeur, on ferait:$parse('name').assign($scope, 'image2')
Tous ces services travaillent ensemble pour fournir une interface utilisateur en direct dans AngularJS. Mais ils opèrent à différents niveaux:
$parse
ne concerne que les expressions individuelles ( name
, extension
). C'est un service de lecture-écriture.
$interpolate
est en lecture seule et concerne les chaînes contenant plusieurs expressions ( /path/{{name}}.{{extension}}
)
$compile
est au cœur des machines AngularJS et peut transformer des chaînes HTML (avec des directives et des expressions d'interpolation) en DOM en direct.
pkozlowski.opensource
la source
$interpolate
dans AnjularJS et j'ai finalement obtenu une réponse compacte et informative.$ interpolate n'a pas l'accès en écriture aux variables $ scope comme nous l'avons dans $ eval et $ parse
$ parse, $ interpolate ---> doit être injecté mais $ eval n'a pas besoin d'être injecté dans le contrôleur ou là où il est utilisé
$ parse, $ interpolate donnent la fonction qui peut être évaluée par rapport à n'importe quel contexte mais $ eval est toujours évalué par rapport à $ scope.
$ eval et $ interpolate dans les coulisses utilise uniquement $ parse.
la source
Voici l'explication mignonne.
la source