Quelle est la différence entre les services $parse
, $interpolate
et $compile
? Pour moi, ils font tous la même chose: prendre un modèle et le compiler en fonction de modèle.
Réponse
Trop de publicités?Ceux sont tous des exemples de services qui aide dans AngularJS le rendu de l'affichage (bien qu' $parse
et $interpolate
pourrait être utilisé à l'extérieur de ce domaine). Pour illustrer ce qu'est le rôle de chaque service prenons l'exemple de ce morceau de code HTML:
var imgHtml = '<img ng-src="/path/{{name}}.{{extension}}">'
et valeurs de la portée:
$scope.name = 'image';
$scope.extension = 'jpg';
Compte tenu de ce balisage voici ce que chaque service apporte à la table:
-
$compile
- on peut prendre l'ensemble du balisage et de la transformer en une fonction de liaison qui, lorsqu'elle est exécutée à l'encontre d'un certain champ d'application va transformer un morceau de texte HTML dynamique, DOM live avec toutes les directives (ici:ng-src
) réagir à des changements de modèle. On pourrait invoquer celle-ci comme suit: $compiler(imgHtml)($champ) et d'un élément du DOM avec tous les événements DOM limites.$compile
est prise de l'utilisation de$interpolate
(entre autres choses) pour faire son travail. -
$interpolate
sait comment traiter une chaîne de caractères avec embedded interpolation expressions, ex.:/path/{{name}}.{{extension}}
. En d'autres termes, il peut prendre une corde avec interpolation des expressions, une portée et d'en faire le texte qui en résulte. On peut penser à de la$interpolation
service très simple, basée sur une chaîne de modèle de langue. Compte tenu de l'exemple ci-dessus serait d'utiliser ce service comme:$interpolate("/path/{{name}}.{{extension}}")($scope)
pour obtenir lepath/image.jpg
chaîne de caractères comme un résultat. -
$parse
est utilisée par$interpolate
pour évaluer les expressions individuelles (name
,extension
) par rapport à une portée. Il peut être utilisé à la fois à lire et à définir des valeurs pour une expression donnée. Par exemple, pour évaluer l'name
expression on le ferait:$parse('name')($scope)
pour obtenir une "image" de la valeur. Pour définir la valeur:$parse('name').assign($scope, 'image2')
Tous ces services travaillent ensemble pour fournir un live de l'INTERFACE utilisateur dans AngularJS. Mais ils opèrent à différents niveaux:
-
$parse
est concerné avec une expression individuelle seulement (name
,extension
). C'est une lecture-écriture de service. -
$interpolate
sont en lecture seule et est préoccupé par les chaînes contenant plusieurs expressions (/path/{{name}}.{{extension}}
) -
$compile
est au cœur de AngularJS machines et peut tourner les chaînes HTML (avec les directives et l'interpolation des expressions) dans les DOM.