回答:
これらはすべて、AngularJSビューのレンダリングを支援するサービスの例です(ただし$parse
、 $interpolate
このドメイン外でも使用できます)。各サービスの役割を説明するために、このHTMLの例を見てみましょう。
var imgHtml = '<img ng-src="/path/{{name}}.{{extension}}">'
スコープの値:
$scope.name = 'image';
$scope.extension = 'jpg';
このマークアップを考えると、各サービスがテーブルにもたらすものは次のとおりです。
$compile
-マークアップ全体を取得してリンク機能に変換できます。特定のスコープに対して実行すると、HTMLテキストの一部が動的なライブDOMになり、ng-src
モデルの変更に反応するすべてのディレクティブ(ここでは)が含まれます。$ compile(imgHtml)($ scope)のように呼び出し、結果としてすべてのDOMイベント境界を持つDOM要素を取得します。$compile
利用作って$interpolate
その仕事をする(他のものの間に)。$interpolate
埋め込まれた補間式で文字列を処理する方法を知っています/path/{{name}}.{{extension}}
。例:。つまり、補間式を含む文字列とスコープを取得して、結果のテキストに変換できます。この$interpolation
サービスは、非常に単純な文字列ベースのテンプレート言語と考えることができます。上記の例では、次のようなサービスを使用して、結果として文字列$interpolate("/path/{{name}}.{{extension}}")($scope)
を取得しpath/image.jpg
ます。$parse
は、スコープに対して$interpolate
個々の式(name
、extension
)を評価するために使用されます。これは、指定された式の値の読み取りと設定の両方に使用できます。たとえば、name
式を評価する$parse('name')($scope)
には、「イメージ」値を取得します。値を設定するには、次のようにします。$parse('name').assign($scope, 'image2')
これらすべてのサービスが連携して、AngularJSでライブUIを提供します。しかし、それらはさまざまなレベルで動作します。
$parse
は個々の式のみに関係しています(name
、extension
)。読み書きサービスです。$interpolate
読み取り専用で、複数の式を含む文字列に関係しています(/path/{{name}}.{{extension}}
)$compile
AngularJS機構の中心であり、HTMLストリング(ディレクティブと補間式を含む)をライブDOMに変換できます。$interpolate
にAnjularJSのどこにあるかをあらゆる場所で検索しており、最終的にコンパクトで有益な答えを得ました。
$interpolate-->
Let us say you have two variables assigned to $scope object in the controller,
$scope.a = 2;
$scope.b = 3;
var f = $interpolate("Result is : {{a*b}}");
var result = f($scope);
console.log(result); --->'Result is 6'
This means that $interpolate can take the string which has one or more angular expressions.
Now $parse:
var f1 = $parse("a*b");
var result1 = f1($scope);
console.log(result1); ----> '6'
**So $interpolate has the capability to evaluate a string with angular expressions mixed up in the string against the scope to get the result**.
Another important difference between $interpolate and $parse,$eval is:
**$interpolate has the capability to work with strings containing filters along with angular expressions.**
This feature is not accessible in $eval , $parse.
console.log($interpolate("Result is : {{a*b | currency : 'USD$'}}")($scope));
---> 'Result is USD $6.00'
$ intervalateには、$ evalと$ parseのように$ scope変数への書き込みアクセス権がありません。
$ parse、$ interpolate --->注入する必要がありますが、$ evalはコントローラーまたはそれが使用される場所に注入する必要はありません
$ parse、$ interpolateは任意のコンテキストに対して評価できる関数を提供しますが、$ evalは常に$ scopeに対して評価されます。
$ evalと$ interpolateは舞台裏で$ parseのみを使用します。
こちらがかわいい説明です。
var img = img/{{name}}.{{extension}}
$parse - > (name,extension) = > vimal , .jpg
$interpolate -> use angular $parse and convert into string -> img/vimal.jpg
$compile -> can turn html string img/vimal.jpg into live DOM so new img tag will be added inside our DOM with all prototype that a img tag have.