Esos son todos ejemplos de servicios que ayudan en AngularJS la representación de vista (aunque $parse
y $interpolate
podría ser utilizado fuera de este dominio). Para ilustrar cuál es el papel de cada servicio, tomemos un ejemplo de esta pieza de HTML:
var imgHtml = '<img ng-src="/path/{{name}}.{{extension}}">'
y valores en el alcance:
$scope.name = 'image';
$scope.extension = 'jpg';
Dado este marcado, esto es lo que cada servicio trae a la mesa:
$compile
- puede tomar todo el marcado y convertirlo en una función de enlace que, cuando se ejecuta contra un determinado alcance, convertirá un fragmento de texto HTML en dinámico, DOM vivo con todas las directivas (aquí ng-src
:) que reaccionan a los cambios del modelo. Uno lo invocaría de la siguiente manera: $ compile (imgHtml) ($ scope) y como resultado obtendría un elemento DOM con todos los límites del evento DOM. $compile
está haciendo uso de$interpolate
(entre otras cosas) para hacer su trabajo.
$interpolate
sabe cómo procesar una cadena con expresiones de interpolación embebidos, ej .: /path/{{name}}.{{extension}}
. En otras palabras, puede tomar una cadena con expresiones de interpolación, un alcance y convertirla en el texto resultante. Uno puede pensar en el $interpolation
servicio como un lenguaje de plantilla muy simple, basado en cadenas. Dado el ejemplo anterior, se usaría este servicio como: $interpolate("/path/{{name}}.{{extension}}")($scope)
para obtener la path/image.jpg
cadena como resultado.
$parse
se utiliza $interpolate
para evaluar expresiones individuales ( name
, extension
) contra un ámbito. Se puede usar para leer y establecer valores para una expresión dada. Por ejemplo, para evaluar la name
expresión se haría: $parse('name')($scope)
obtener el valor de "imagen". Para establecer el valor uno haría:$parse('name').assign($scope, 'image2')
Todos esos servicios están trabajando juntos para proporcionar una interfaz de usuario en vivo en AngularJS. Pero operan en diferentes niveles:
$parse
se refiere solo a expresiones individuales (name
, extension
). Es un servicio de lectura y escritura.
$interpolate
es de solo lectura y se refiere a cadenas que contienen múltiples expresiones (/path/{{name}}.{{extension}}
)
$compile
está en el corazón de la maquinaria de AngularJS y puede convertir cadenas HTML (con directivas y expresiones de interpolación) en DOM en vivo.
pkozlowski.opensource
fuente
$interpolate
partes lo que realmente está en AnjularJS y finalmente obtuve una respuesta compacta e informativa.$ interpolate no tiene acceso de escritura a las variables de $ alcance como tenemos en $ eval y $ parse
$ parse, $ interpolar ---> necesita ser inyectado pero $ eval no necesita ser inyectado en el controlador o donde se usa
$ parse, $ interpolar dan la función que puede evaluarse en cualquier contexto, pero $ eval siempre se evalúa en $ alcance.
$ eval y $ interpolate detrás de escena usan solo $ parse.
fuente
Aquí está la linda explicación.
fuente