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