まず、現(xiàn)在の技術(shù)環(huán)境について説明します: angular1.6、ui-route、require 質(zhì)問:
1. ui-route によってロードされるテンプレートと動的にロードされるテンプレートのどちらが最初にコンパイルされて実行されるか。登録されたコントローラー?例: テンプレートの #id の幅を取得したい場合は、$timeout が必要です。そうでない場合は、undefine
が表示されます。 それとも、テンプレートの前にカスタム命令のコンパイルがロードされますか?並列ロード?
少しわかりにくいので、関連記事や解説もよろしくお願いします。
追加の質(zhì)問: {{}} は型を文字列に自動的に変換しますか?
ありがとうございます、ご回答もありがとうございました
閉關(guān)修行中......
官方有詳細解釋、編譯過程に関する介紹:
HTML のコンパイルは 3 つのフェーズで行われます:
$compile は DOM を走査し、ディレクティブと一致します。
要素がディレクティブに一致することがコンパイラーによって検出された場合、
ディレクティブは DOM
要素に一致するディレクティブのリストに追加されます。単一の要素が複數(shù)のディレクティブに一致する場合があります。
DOM 要素に一致するすべてのディレクティブが識別されると、
コンパイラーは優(yōu)先度に従ってディレクティブを並べ替えます。
各ディレクティブのコンパイル関數(shù)が実行されます。各コンパイル
関數(shù)には DOM を変更する機會があります。各コンパイル関數(shù)
はリンク関數(shù)を返します。これらの関數(shù)は
「結(jié)合された」リンク関數(shù)に構(gòu)成され、各ディレクティブの返された
リンク関數(shù)を呼び出します。
$compile は、前のステップの結(jié)合
linking 関數(shù)を呼び出して、テンプレートをスコープにリンクします。これにより、個別ディレクティブの
リンク関數(shù)が呼び出され、要素にリスナー
が登録され、各
ディレクティブが行うように設(shè)定されているスコープで $watchs が設(shè)定されます。
具體的な主詳讀 https://docs.angularjs.org/gu... この篇はコンパイラに関する文章です。
シーケンスは次のようになると思います。テンプレートをロードすると同時にコントローラーに移動し、コントローラー內(nèi)のデータを初期化してから、$digest ステージに入り、テンプレートをレンダリングします。したがって、コントローラーの読み込みプロセス中にテンプレートの #id の幅を取得できない可能性があります。
$digest の終了後にタイムアウト內(nèi)にコードを?qū)g行し、再度 $digest をトリガーする $timeout を記述します。
カスタム命令のコンパイル フェーズは、実際にテンプレートの構(gòu)造を決定します。コンパイル フェーズは、データを準備してからテンプレートをレンダリングします。
何か間違っている場合は、修正して議論してください。