从一般意义上来说,你不能仅仅通过一个指令来“完全确定”<table>
元素。
但在某些情况下你可以确定。在你的情况下,如果内部内容是ng-repeat
-ed,那么如果项目数组ngRepeat
Works 准备好了,那么实际的 DOM 元素将在摘要周期结束时准备好。您可以在之后捕获它$timeout
0延迟:
link: function(scope, element){
$timeout(function(){
console.log(element.find("tr").length); // will be > 0
})
}
但是,一般来说,您无法确定是否捕获了内容。如果ngRepeat
ed 数组还没有吗?或者如果有一个怎么办ng-include
反而?
<table directive-name ng-include="'templates/tr.html'">
</table>
或者,如果有一个自定义指令的工作方式与ngRepeat
does?
但是,如果您完全控制内容,一种可能的了解方法是包含一些辅助指令作为最里面/最后一个元素,并让它联系其父元素directiveName
当它链接时:
<table directive-name>
<tr ng-repeat="...">
<td ng-repeat="...">
<directive-name-helper ng-if="$last">
</td>
</tr>
</table>
.directive("directiveNameHelper", function(){
return {
require: "?^directiveName",
link: function(scope, element, attrs, ctrl){
if (!ctrl) return;
ctrl.notifyDone();
}
}
})