Ответ 1
Вы не можете в общем смысле быть "полностью уверенным", просто указав элемент <table>
.
Но вы можете быть уверены в некоторых случаях. В вашем случае, если внутренний контент ng-repeat
-ed, то если массив элементов, над которыми работает ngRepeat
, готов, то фактические элементы 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
?
Но если у вас есть полный контроль над содержимым, один из возможных способов знать - включить какую-либо вспомогательную директиву в качестве самого внутреннего/последнего элемента и связать ее со своим родителем 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();
}
}
})