Dies sind alles Beispiele für Dienste, die das Rendern von AngularJS-Ansichten unterstützen (obwohl $parse
und $interpolate
außerhalb dieser Domäne verwendet werden könnten). Um zu veranschaulichen, welche Rolle die einzelnen Dienste spielen, nehmen wir ein Beispiel für dieses HTML-Element:
var imgHtml = '<img ng-src="/path/{{name}}.{{extension}}">'
und Werte zum Umfang:
$scope.name = 'image';
$scope.extension = 'jpg';
Angesichts dieses Markups bringt jeder Service Folgendes auf den Tisch:
$compile
- Es kann das gesamte Markup in eine Verknüpfungsfunktion umwandeln, die bei Ausführung in einem bestimmten Bereich einen HTML-Text in ein dynamisches Live-DOM verwandelt, wobei alle Anweisungen (hier ng-src
:) auf Modelländerungen reagieren. Man würde es wie folgt aufrufen: $ compile (imgHtml) ($ scope) und als Ergebnis ein DOM-Element mit allen DOM-Ereignisgrenzen erhalten. $compile
nutzt $interpolate
(unter anderem) seine Arbeit.
$interpolate
weiß, wie man einen String mit eingebetteten Interpolationsausdrücken verarbeitet, z /path/{{name}}.{{extension}}
. Mit anderen Worten, es kann eine Zeichenfolge mit Interpolationsausdrücken und einem Gültigkeitsbereich in den resultierenden Text umwandeln. Man kann sich den $interpolation
Service als eine sehr einfache, stringbasierte Vorlagensprache vorstellen. In dem obigen Beispiel würde man diesen Dienst wie folgt verwenden: $interpolate("/path/{{name}}.{{extension}}")($scope)
um den path/image.jpg
String als Ergebnis zu erhalten.
$parse
wird verwendet $interpolate
, um einzelne Ausdrücke ( name
, extension
) anhand eines Bereichs zu bewerten . Es kann verwendet werden, um Werte für einen bestimmten Ausdruck zu lesen und festzulegen. Um beispielsweise den Ausdruck auszuwerten, würde man Folgendes tun: um den Wert "image" zu erhalten. Um den Wert einzustellen, würde man tun:name
$parse('name')($scope)
$parse('name').assign($scope, 'image2')
Alle diese Dienste arbeiten zusammen, um eine Live-Benutzeroberfläche in AngularJS bereitzustellen. Aber sie arbeiten auf verschiedenen Ebenen:
$parse
befasst sich nur mit einzelnen Ausdrücken ( name
, extension
). Es ist ein Lese- / Schreibdienst.
$interpolate
ist schreibgeschützt und befasst sich mit Zeichenfolgen, die mehrere Ausdrücke enthalten ( /path/{{name}}.{{extension}}
)
$compile
ist das Herzstück der AngularJS-Maschinerie und kann HTML-Zeichenfolgen (mit Direktiven und Interpolationsausdrücken) in Live-DOM umwandeln.
pkozlowski.opensource
quelle
$interpolate
in AnjularJS ist, und schließlich habe ich eine kompakte und informative Antwort erhalten.$ interpolate hat keinen Schreibzugriff auf die $ scope-Variablen wie in $ eval und $ parse
$ parse, $ interpolate ---> muss injiziert werden, aber $ eval muss nicht in den Controller injiziert werden oder wo es verwendet wird
$ parse, $ interpolate geben die Funktion an, die für jeden Kontext ausgewertet werden kann, aber $ eval wird immer für $ scope ausgewertet.
$ eval und $ interpolate hinter den Kulissen verwenden nur $ parse.
quelle
Hier ist die süße Erklärung.
quelle