Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ng重复项在父指令的post链接功能中不可用_Javascript_Angularjs_Angularjs Directive - Fatal编程技术网

Javascript ng重复项在父指令的post链接功能中不可用

Javascript ng重复项在父指令的post链接功能中不可用,javascript,angularjs,angularjs-directive,Javascript,Angularjs,Angularjs Directive,我想从“hosting”指令的post-link函数中绑定ng repeat项上的事件侦听器。但是在post-linkcallng-repeat期间,尚未呈现项目(请参见plunker中的控制台日志) 在阅读了关于指令生命周期()的文章后,我得到了一个印象,在post-linkallHTML中,应该已经可以使用并准备好添加事件侦听器了 有什么不同吗 代码: 模板: <ul> <li ng-repeat="item in items"> <a href="

我想从“hosting”指令的
post-link
函数中绑定
ng repeat
项上的事件侦听器。但是在
post-link
call
ng-repeat
期间,尚未呈现项目(请参见plunker中的控制台日志)

在阅读了关于指令生命周期()的文章后,我得到了一个印象,在
post-link
all
HTML
中,应该已经可以使用并准备好添加事件侦听器了

有什么不同吗

代码:

模板:

<ul>
  <li ng-repeat="item in items">
    <a href="javascript:;">{{item}}</a>
  </li>
</ul>
普朗克:

有什么不同吗

ng repeat
根据数据添加和销毁DOM。
.find
操作找不到元素,因为它们尚未添加到DOM中

在指令中添加事件处理程序,该指令在框架将元素添加到DOM时调用:

app.directive("myFocus", function() {
    return {
        link: postLink
    };
    function postLink(scope, elem attrs) {
        elem.on('focus', function() {
            console.log('I have focus');
       });
    }
})
用法

ng repeat
指令将元素添加到DOM中时,
myFocus
指令将添加事件处理程序。

在某些情况下,链接函数中的DOM尚未就绪。您需要使用“$timeout”来确保感谢比尔的建议。我已经发现它将与$timeout一起工作,但我想知道,当DOM在link中不可用时会出现什么情况,以及为什么会出现这种情况。使用$timeout对我来说有点不方便,尽管它确实是一个快速的解决方案。这可能会对你有所帮助-感谢Allabakash,我仔细阅读了答案,找到了“解决办法”。虽然我想知道为什么
ng repeat
特别。谢谢你的回答,但我还有一个后续问题。何时将DOM pre项添加到页面?它是否发生在指令生命周期函数(编译、控制器、前链接、后链接)之外?我在
ng repeat
docs上找不到任何信息。
app.directive("myFocus", function() {
    return {
        link: postLink
    };
    function postLink(scope, elem attrs) {
        elem.on('focus', function() {
            console.log('I have focus');
       });
    }
})
<ul>
  <li ng-repeat="item in items">
    <a my-focus href="javascript:;">{{item}}</a>
  </li>
</ul>