我有一个相当简单的指令,我试图从中查询一个单独的(但相关的)DOM 元素。
相关标记:
<a href="#target-id" data-collapsible="isCollapsed">Open</a>
...
<div id="target-id">...</div>
控制器:
app.controller('MyController', ['$scope', function( $scope ) {
$scope.isCollapsed = true;
}]);
指示:
app.directive('collapsible', function() {
return {
restrict: 'A',
link: function( scope, el, attrs ) {
var target = attrs.href.slice(1); // "target-id"
console.log(document.getElementById(target)); // this will be null
}
};
});
问题是 DOM 查询 ( document.getElementById(target)
) 在<div id="target-id">...</div>
可用之前正在运行。到目前为止,我只能通过将我的查询包装在一个$timeout
以 100-500 毫秒的延迟将查询包装在 a 中来解决竞争条件,但这感觉不对。
当然我做错了什么和/或必须有更好的方法来解决这个问题?
这个 SO 线程概述了一个类似的问题,但零延迟超时对我不起作用。