$parse
、$interpolate
およびサービスの違いは何ですか$compile
? 私にとって、それらはすべて同じことを行います。つまり、テンプレートを取得して、それをテンプレート関数にコンパイルします。
ベストアンサー1
これらはすべて、AngularJS ビューのレンダリングを支援するサービスの例です (ただし$parse
、$interpolate
このドメイン以外でも使用できます)。各サービスの役割を説明するために、次の HTML の例を見てみましょう。
var imgHtml = '<img ng-src="/path/{{name}}.{{extension}}">'
スコープ上の値:
$scope.name = 'image';
$scope.extension = 'jpg';
このマークアップを考慮すると、各サービスが提供するものは次のとおりです。
$compile
- マークアップ全体をリンク関数に変換し、特定のスコープに対して実行すると、HTML テキストの一部を、ng-src
モデルの変更に反応するすべてのディレクティブ (ここでは ) を含む動的なライブ DOM に変換します。次のように呼び出すと、 $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)
「image」値を取得します。値を設定するには次のようにします。$parse('name').assign($scope, 'image2')
これらすべてのサービスは連携して AngularJS でライブ UI を提供します。ただし、それぞれ異なるレベルで動作します。
$parse
name
は個々の式 ( 、 )のみを対象としますextension
。これは読み取り/書き込みサービスです。$interpolate
読み取り専用であり、複数の式を含む文字列に関係します(/path/{{name}}.{{extension}}
)$compile
AngularJS メカニズムの中核であり、HTML 文字列 (ディレクティブと補間式を含む) をライブ DOM に変換できます。