首先说的当下的技术环境:angular1.6,ui-route,require,疑问:1、ui-route加载的template和动态注册的controller谁先被编译执行?例如:我想获取template的#id的宽必须要$timeout?否则就出现undefine2、自定义指令的compile是不是先于template加载?还是并行加载?有点混乱,跪求解答,相关文章和解惑也跪谢!附加题:{{}}会自动将类型转化为字符串吧?谢谢,回答部分也非常感谢
闭关修行中......
官方有详细解释、编译过程に関する介绍:
HTML のコンパイルは 3 つのフェーズで行われます:
$compile は DOM を走査し、ディレクティブと一致します。
要素がディレクティブに一致することがコンパイラーによって検出された場合、ディレクティブは DOM 要素に一致するディレクティブのリストに追加されます。単一の要素が複数のディレクティブに一致する場合があります。
DOM 要素に一致するすべてのディレクティブが識別されると、コンパイラーは優先度に従ってディレクティブを並べ替えます。
各ディレクティブのコンパイル関数が実行されます。各コンパイル関数には DOM を変更する機会があります。各コンパイル関数はリンク関数を返します。これらの関数は「結合された」リンク関数に構成され、各ディレクティブの返されたリンク関数を呼び出します。
$compile は、前のステップの結合linking 関数を呼び出して、テンプレートをスコープにリンクします。これにより、個別ディレクティブのリンク関数が呼び出され、要素にリスナーが登録され、各ディレクティブが行うように設定されているスコープで $watchs が設定されます。
具体的な主详读 https://docs.angularjs.org/gu... この篇はコンパイラに関する文章です。
シーケンスは次のようになると思います。テンプレートをロードすると同時にコントローラーに移動し、コントローラー内のデータを初期化してから、$digest ステージに入り、テンプレートをレンダリングします。したがって、コントローラーの読み込みプロセス中にテンプレートの #id の幅を取得できない可能性があります。 $digest の終了後にタイムアウト内にコードを実行し、再度 $digest をトリガーする $timeout を記述します。
カスタム命令のコンパイル フェーズは、実際にテンプレートの構造を決定します。コンパイル フェーズは、データを準備してからテンプレートをレンダリングします。
何か間違っている場合は、修正して議論してください。
官方有详细解释、编译过程に関する介绍:
HTML のコンパイルは 3 つのフェーズで行われます:
$compile は DOM を走査し、ディレクティブと一致します。
要素がディレクティブに一致することがコンパイラーによって検出された場合、
ディレクティブは DOM
要素に一致するディレクティブのリストに追加されます。単一の要素が複数のディレクティブに一致する場合があります。
DOM 要素に一致するすべてのディレクティブが識別されると、
コンパイラーは優先度に従ってディレクティブを並べ替えます。
各ディレクティブのコンパイル関数が実行されます。各コンパイル
関数には DOM を変更する機会があります。各コンパイル関数
はリンク関数を返します。これらの関数は
「結合された」リンク関数に構成され、各ディレクティブの返された
リンク関数を呼び出します。
$compile は、前のステップの結合
linking 関数を呼び出して、テンプレートをスコープにリンクします。これにより、個別ディレクティブの
リンク関数が呼び出され、要素にリスナー
が登録され、各
ディレクティブが行うように設定されているスコープで $watchs が設定されます。
具体的な主详读 https://docs.angularjs.org/gu... この篇はコンパイラに関する文章です。
シーケンスは次のようになると思います。テンプレートをロードすると同時にコントローラーに移動し、コントローラー内のデータを初期化してから、$digest ステージに入り、テンプレートをレンダリングします。したがって、コントローラーの読み込みプロセス中にテンプレートの #id の幅を取得できない可能性があります。
$digest の終了後にタイムアウト内にコードを実行し、再度 $digest をトリガーする $timeout を記述します。
カスタム命令のコンパイル フェーズは、実際にテンプレートの構造を決定します。コンパイル フェーズは、データを準備してからテンプレートをレンダリングします。
何か間違っている場合は、修正して議論してください。