私は主に Angular JS 1.0.2 で書かれたランディング ページに取り組んでいます。新しいバージョンへのアップグレードは、少なくともすぐには考えられないかもしれません。問題なく動作していますが、少し最適化を試みています。少し背景を説明すると、ページ上のさまざまなモーダル ウィンドウやその他のカスタム要素に対して多数のディレクティブが設定されています。これらは tempateUrl パラメーターを使用し、必要な HTML をすべて含む別の html ファイルから取得します。完全なコードを投稿するにはコードが多すぎるため、簡単で汚い例:
ランディング ページの html:
<div help-menu />
角度指令:
module.directive('helpMenu', function(){
templateUrl: helpMenu.html,
controller: ...
link: ...
});
helpMenu.html には、問題の要素の単純な html が含まれています。
これは問題ではありませんが、html ファイルの数が増え続けているため、それらをランディング ページのメインの html ファイルにマージして、GET 要求の数を減らしたいと考えています。これを行うには、基本的に、各ファイルから HTML を切り取り、ランディング ページの HTML ファイルの最後に配置します (取得する ID を持つ div にラップします)。ディレクティブは次を使用するように変更されます。
template: $('#helpMenu')
helpMenu に angular コードが含まれていない場合、これは問題なく機能します。ただし、html に ng-repeat、ng-show などの角度コードが含まれていると、Firebug で「node is undefined」または「linkNode is undefined」エラーが発生します。奇妙なことに、すべてが期待どおりに機能します。エラーにもかかわらず、とにかくそれを取り除きたいです。
これを修正するためにいくつかの方法を試しましたが (さまざまな時点で $compile を試みても解決しませんでした)、成功せず、この特定のエラーに関する情報はほとんどありません。入ってくるhtmlが両方の方法で同一になるのになぜ問題になるのか、私は困惑しています。おそらく、template と templateUrl の扱いが異なるのではないでしょうか?