Todos esses são exemplos de serviços que auxiliam na renderização de exibição do AngularJS (embora $parse
e $interpolate
possam ser usados fora deste domínio). Para ilustrar qual é o papel de cada serviço, vamos dar um exemplo desta parte do HTML:
var imgHtml = '<img ng-src="/path/{{name}}.{{extension}}">'
e valores no escopo:
$scope.name = 'image';
$scope.extension = 'jpg';
Dada essa marcação, aqui está o que cada serviço traz para a tabela:
$compile
- pode pegar toda a marcação e transformá-la em uma função de vinculação que, quando executada em um determinado escopo, transformará um pedaço de texto HTML em DOM dinâmico e dinâmico, com todas as diretivas (aqui ng-src
:) reagindo às alterações do modelo. Alguém poderia invocá-lo da seguinte forma: $ compile (imgHtml) ($ scope) e obteria um elemento DOM com todos os limites do evento DOM como resultado. $compile
está fazendo uso $interpolate
(entre outras coisas) para fazer seu trabalho.
$interpolate
sabe como processar uma string com expressões de interpolação incorporadas, ex /path/{{name}}.{{extension}}
. : . Em outras palavras, ele pode pegar uma string com expressões de interpolação, um escopo e transformá-la no texto resultante. Pode-se pensar no $interpolation
serviço como uma linguagem de modelos muito simples e baseada em strings. Dado o exemplo acima, seria usado este serviço como: $interpolate("/path/{{name}}.{{extension}}")($scope)
para obter a path/image.jpg
string como resultado.
$parse
é usado $interpolate
para avaliar expressões individuais ( name
, extension
) em relação a um escopo. Pode ser usado para ler e definir valores para uma determinada expressão. Por exemplo, para avaliar a name
expressão que se faria: $parse('name')($scope)
obter o valor "imagem". Para definir o valor que se faria:$parse('name').assign($scope, 'image2')
Todos esses serviços estão trabalhando juntos para fornecer uma interface do usuário ao vivo no AngularJS. Mas eles operam em diferentes níveis:
$parse
se preocupa apenas com expressões individuais ( name
, extension
). É um serviço de leitura e gravação.
$interpolate
é somente leitura e se preocupa com cadeias que contêm várias expressões ( /path/{{name}}.{{extension}}
)
$compile
está no coração do mecanismo AngularJS e pode transformar seqüências de caracteres HTML (com diretivas e expressões de interpolação) em DOM ao vivo.
pkozlowski.opensource
fonte
$interpolate
no AnjularJS e, finalmente, recebi uma resposta compacta e informativa.$ interpolate não tem acesso de gravação às variáveis $ scope, como temos em $ eval e $ parse
$ parse, $ interpolate ---> precisam ser injetados, mas $ eval não precisa ser injetado no controlador ou onde é usado
$ parse, $ interpolate fornecem a função que pode ser avaliada em qualquer contexto, mas $ eval é sempre avaliado em relação ao $ scope.
$ eval e $ interpolam nos bastidores usam apenas $ parse.
fonte
Aqui está a explicação fofa.
fonte