Javascript 调用链接函数时元素不在DOM中?

Javascript 调用链接函数时元素不在DOM中?,javascript,angularjs,hyperlink,prelink,Javascript,Angularjs,Hyperlink,Prelink,我有一个指令返回带有templateUrl和链接属性的DDO。我的templateUrl包含div上的ngRepeat指令,其中包含checkbox元素。在我的链接函数中,我试图选择所有子复选框,但在调用我的链接函数时,它们不会添加到DOM中。如果我用$timeout包装我的select,当然会选中复选框。根据文档,Angular按以下顺序调用函数: mainDirective->compile->preLink->firstChildDirective->compile->preLink->l

我有一个指令返回带有templateUrl和链接属性的DDO。我的templateUrl包含div上的ngRepeat指令,其中包含checkbox元素。在我的链接函数中,我试图选择所有子复选框,但在调用我的链接函数时,它们不会添加到DOM中。如果我用$timeout包装我的select,当然会选中复选框。根据文档,Angular按以下顺序调用函数:

mainDirective->compile->preLink->firstChildDirective->compile->preLink->lastChildDirective->compile->preLink->postLink->firstChildDirective->postLink->mainDirective->postLink

根据Angular docs的说法,如果您返回带有link属性的DDO,它被称为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));
      }
    }
此外,如果存在链接属性,并且templateUrl directive.compile被分配到directive.link

我清楚地看到,当没有templateUrl时,addLinkFns(null,linkFn)将链接函数绑定到postLink,但当您有带有一些子指令的templateUrl时会发生什么情况。为什么在调用链接函数时子复选框不可用?
谢谢你的帮助

您忘记了一件事:指令不必是静态的。它们可以对模型中的更改做出反应。这就是
ng repeat
所做的。评估模型时,将创建/删除图元。例如,可以在运行时添加项,那么当您的指令被链接时,这些复选框显然不可能出现在DOM中。

ng repeats
在不使用它们时很时髦<指令中的代码>链接似乎在元素完全进入DOM(摘要循环完成)之前触发。所以,您可以在
$timeout()
中包装任何DOM操作代码,而不需要延迟,它只是放在循环堆栈的末尾,或者观察要定义的元素属性