-
肥皂起泡泡
实际上,您应该使用指令,并且不存在与ng-重复循环结束相关联的事件(因为每个元素都是单独构造的,并且具有自己的事件)。但是,使用指令可能是您所需要的全部;(B)您可以使用一些ng-重复特定属性来使您的“onngRepeat Finish”事件。具体来说,如果您只想将事件样式/添加事件添加到整个表中,那么可以在包含所有ngRepeat元素的指令中这样做。另一方面,如果要具体处理每个元素,可以在ngRepeat中使用一个指令,在创建每个元素之后,它将对每个元素起作用。然后,有$index, $first, $middle和$last属性可用于触发事件。所以对于这个HTML:<div ng-controller="Ctrl" my-main-directive>
<div ng-repeat="thing in things" my-repeat-directive>
thing {{thing}} </div></div>您可以使用如下指令:angular.module('myApp', []).directive('myRepeatDirective', function() {
return function(scope, element, attrs) {
angular.element(element).css('color','blue');
if (scope.$last){
window.alert("im the last!");
}
};}).directive('myMainDirective', function() {
return function(scope, element, attrs) {
angular.element(element).css('border','5px solid red');
};});在这里看到它的作用柱塞..希望能帮上忙!
-
拉丁的传说
如果您只是想在循环结束时执行一些代码,那么这里有一个稍微简单一些的变体,它不需要额外的事件处理:<div ng-controller="Ctrl">
<div class="thing" ng-repeat="thing in things" my-post-repeat-directive>
thing {{thing}} </div></div>function Ctrl($scope) {
$scope.things = [
'A', 'B', 'C'
];}angular.module('myApp', []).directive('myPostRepeatDirective', function() {
return function(scope, element, attrs) {
if (scope.$last){
// iteration is complete, do whatever post-processing
// is necessary
element.parent().css('border', '1px solid black');
}
};});看现场演示。
-
莫回无
不需要创建指令,特别是只需要创建一个ng-repeat全部事件。ng-init对你有魔力吗。 <div ng-repeat="thing in things" ng-init="$last && finished()">这个$last确保,那finished只有当最后一个元素被呈现到DOM时才会触发。别忘了创造$scope.finished事件。编码愉快!如果您还想调用finished如果数组中没有项,则可以使用以下方法变通<div style="display:none" ng-init="things.length < 1 && finished()"></div>//or<div ng-if="things.length > 0" ng-init="finished()"></div>只需在ng-repeat元素。它将检查数组是否没有任何值,并相应地调用函数。例如:<div ng-if="things.length > 0" ng-init="finished()"></div><div ng-repeat="thing in things" ng-init="$last && finished()">