1. ホーム
  2. javascript

[解決済み] parse、$interpolate、$compileの各サービスの違いは何ですか?

2022-05-03 17:51:18

質問

とはどのような違いがあるのでしょうか? $parse , $interpolate$compile サービスですか? 私にとっては、それらはすべて同じことをします:テンプレートを取り、それをtemplate-functionにコンパイルします。

どのように解決するのですか?

これらはすべて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) を使用して、"image" の値を取得します。値を設定するには、次のようにします。 $parse('name').assign($scope, 'image2')

これらのサービスはすべて、AngularJSでライブUIを提供するために連携しているのです。しかし、それらは異なるレベルで動作しています。

  • $parse は個々の表現にのみ関係します ( name , extension ). 読み書き可能なサービスです。
  • $interpolate は読み取り専用で、複数の式を含む文字列に関するものです ( /path/{{name}}.{{extension}} )
  • $compile はAngularJSの機械の中心であり、(ディレクティブと補間式を使って)HTML文字列をライブDOMに変換することができます。