templateUrl と link プロパティを含む DDO を返すディレクティブがあります。私のtemplateUrlには、チェックボックス要素を含むdivにngRepeatディレクティブが含まれています。私のリンク関数では、すべての子チェックボックスを選択しようとしていますが、リンク関数が呼び出されたときに DOM に追加されません。選択を $timeout でラップすると、もちろんチェックボックスが選択されます。ドキュメントによると、角度は次の順序で関数を呼び出します。
mainDirective->compile->preLink -> firstChildDirective->compile->preLink -> lastChildDirective->compile->preLink->postLink -> firstChildDirective->postLink -> mainDirective->postLink。
リンクプロパティでDDOを返す場合、Angularのドキュメントによると、それはpostLinkとして呼び出されます。これは、私の意見では、すべての子チェックボックスがすでにDOMにあるはずですが、そうではありません。
angular コードを見ると、これはコンパイル関数があり、templateUrl がない場合に当てはまることがわかります。
if (directive.templateUrl) {
assertNoDuplicate('template', templateDirective, directive, $compileNode);
templateDirective = directive;
nodeLinkFn = compileTemplateUrl(directives.splice(i, directives.length - i),
nodeLinkFn, $compileNode, templateAttrs, jqCollection, directive.replace,
childTranscludeFn);
ii = directives.length;
} else if (directive.compile) {
try {
linkFn = directive.compile($compileNode, templateAttrs, childTranscludeFn);
if (isFunction(linkFn)) {
addLinkFns(null, linkFn);
} else if (linkFn) {
addLinkFns(linkFn.pre, linkFn.post);
}
} catch (e) {
$exceptionHandler(e, startingTag($compileNode));
}
}
また、link プロパティがあり、templateUrl ディレクティブ.compile がディレクティブ.link に割り当てられている場合。
templateUrl がない場合に addLinkFns(null, linkFn) がリンク関数を postLink にバインドすることは明らかですが、いくつかの子ディレクティブを含む templateUrl がある場合はどうなりますか。リンク関数が呼び出されているときに子チェックボックスが使用できないのはなぜですか? ご協力ありがとうございました!!!