【发布时间】:2019-12-03 13:33:30
【问题描述】:
我想在“hosting”指令的post-link 函数中绑定ng-repeat 项目上的事件侦听器。但在post-link 调用ng-repeat 期间,项目尚未呈现(请参阅控制台登录plunker)。
在阅读了关于指令生命周期 (https://www.toptal.com/angular-js/angular-js-demystifying-directives) 的文章后,我有一个印象,post-link 中的所有 HTML 都应该已经可用并且可以添加事件侦听器了。
ng-repeat 有什么不同吗?
代码:
angular
.module('myModule', [])
.directive('myDirective',
function() {
return {
scope: { items: '=' },
restrict: 'E',
templateUrl: 'myTemplate.html',
link: function (scope, element) {
console.log(element.html());
var anchors = element.find('a');
console.log(anchors);
anchors.on('focus', function() {
console.log('I have focus');
});
}
};
}
);
模板:
<ul>
<li ng-repeat="item in items">
<a href="javascript:;">{{item}}</a>
</li>
</ul>
【问题讨论】:
-
在某些情况下 dom 在 link func 中没有准备好。您将需要使用 '$timeout' 来确保
-
感谢比尔,您的建议。我已经发现它可以与 $timeout 一起使用,但是我想知道,什么情况下 DOM 在链接中不可用以及为什么。使用 $timeout 对我来说有点 hacky,虽然它绝对是快速的解决方案。
-
感谢 Allabakash,我浏览了答案并找到了“解决方法”。虽然我想知道为什么
ng-repeat很特别。
标签: javascript angularjs angularjs-directive