検索

ホームページ  >  に質問  >  本文

angular.js - angularjs の読み込みとコンパイルのメカニズム

まず、現在の技術環境について説明します: angular1.6、ui-route、require 質問:
1. ui-route によってロードされるテンプレートと動的にロードされるテンプレートのどちらが最初にコンパイルされて実行されるか。登録されたコントローラー?例: テンプレートの #id の幅を取得したい場合は、$timeout が必要です。そうでない場合は、undefine
が表示されます。 それとも、テンプレートの前にカスタム命令のコンパイルがロードされますか?並列ロード?
少しわかりにくいので、関連記事や解説もよろしくお願いします。
追加の質問: {{}} は型を文字列に自動的に変換しますか?
ありがとうございます、ご回答もありがとうございました

阿神阿神2809日前598

全員に返信(2)返信します

  • 淡淡烟草味

    淡淡烟草味2017-05-15 17:13:14

    官方有详细解释、编译过程に関する介绍:

    HTML のコンパイルは 3 つのフェーズで行われます:

    1. $compile は DOM を走査し、ディレクティブと一致します。

      要素がディレクティブに一致することがコンパイラーによって検出された場合、
      ディレクティブは DOM
      要素に一致するディレクティブのリストに追加されます。単一の要素が複数のディレクティブに一致する場合があります。

    2. DOM 要素に一致するすべてのディレクティブが識別されると、
      コンパイラーは優先度に従ってディレクティブを並べ替えます。

      各ディレクティブのコンパイル関数が実行されます。各コンパイル
      関数には DOM を変更する機会があります。各コンパイル関数
      はリンク関数を返します。これらの関数は
      「結合された」リンク関数に構成され、各ディレクティブの返された
      リンク関数を呼び出します。

    3. $compile は、前のステップの結合
      linking 関数を呼び出して、テンプレートをスコープにリンクします。これにより、個別ディレクティブの
      リンク関数が呼び出され、要素にリスナー
      が登録され、各
      ディレクティブが行うように設定されているスコープで $watchs が設定されます。

    4. この結果、スコープと DOM の間のライブ バインディングが生成されます。したがって、この時点で、コンパイルされたスコープ上のモデルの変更は DOM に反映されます。

    具体的な主详读 https://docs.angularjs.org/gu... この篇はコンパイラに関する文章です。

    返事
    0
  • PHP中文网

    PHP中文网2017-05-15 17:13:14

    1. シーケンスは次のようになると思います。テンプレートをロードすると同時にコントローラーに移動し、コントローラー内のデータを初期化してから、$digest ステージに入り、テンプレートをレンダリングします。したがって、コントローラーの読み込みプロセス中にテンプレートの #id の幅を取得できない可能性があります。
      $digest の終了後にタイムアウト内にコードを実行し、再度 $digest をトリガーする $timeout を記述します。

    2. カスタム命令のコンパイル フェーズは、実際にテンプレートの構造を決定します。コンパイル フェーズは、データを準備してからテンプレートをレンダリングします。

    何か間違っている場合は、修正して議論してください。

    返事
    0
  • キャンセル返事