$parse、$interpolate、$compile サービスの違いは何ですか? 質問する

$parse、$interpolate、$compile サービスの違いは何ですか? 質問する

$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 を提供します。ただし、それぞれ異なるレベルで動作します。

  • $parsenameは個々の式 ( 、 )のみを対象としますextension。これは読み取り/書き込みサービスです。
  • $interpolate読み取り専用であり、複数の式を含む文字列に関係します(/path/{{name}}.{{extension}}
  • $compileAngularJS メカニズムの中核であり、HTML 文字列 (ディレクティブと補間式を含む) をライブ DOM に変換できます。

おすすめ記事