Angularでは、$compile
サービスを注入することができ、その場でコンパイルすることができます。このように:再利用できるように$compile
に最初の呼び出しの結果を保存することが可能である場合Angularのテンプレート関数を再利用
let compiledElement = $compile('<my-elem></my-elem>')(myScope);
それでは、私が知りたいことはあります。このような何か:
let templateFunction = $compile('<my-elem></my-elem>');
cacheTemplateFunction(templateFunction);
let compiledElement = templateFunction(myScope);
実際に、ここでは私のコードは次のようになります。
const cachedTemplateFunction = {};
function compileRawHtml(html, scope){
let compiledEl;
if(cachedTemplateFunction[html]){
let tempFunc = cachedTemplateFunction[html];
compiledEl = tempFunc(scope)
} else {
let tempFunc = $compile(html);
cachedTemplateFunction[html] = tempFunc;
compiledEl = tempFunc(scope);
}
}
だから、最初の時間を通してそのテンプレートと、それはテンプレート関数をコンパイルしてキャッシュします。その後、それを2度目に再利用します。私がこれを呼び出すと、未定義のchildNodesに関するエラーが発生します。ですから、$ compile呼び出しから返されるテンプレート関数を再利用することはできないと仮定していますか?
$コンパイル(...)は、DOMが作成されます。 DOMピースは同時に2つの異なる場所にあることはできません。 – estus