发布的每个解决方案都涉及检测ng-repeat完成时的范围。$ last值,如下所示:
angular.module('fooApp')
.directive('onLastRepeat', function () {
return function (scope, element, attrs) {
if (scope.$last) {
setTimeout(function () {
scope.$emit('onRepeatLast', element, attrs);
}, 1);
}
};
})
问题是此解决方案仅在您附加到列表末尾时才有效。如果在中间插入数据,范围。$ last将始终为false,并且您不知道angularjs何时完成了对新绑定行的重新绑定。有没有人有一个解决方案,无论ng-repeat在哪里呈现数据都可以工作?
示例:
HTML:
<button ng-click="addToList()"></button>
<table>
<tbody>
<tr ng-repeat="foo in list" on-last-repeat><td><span>{{foo}}</span></td></tr>
</tbody>
</table>
控制器代码:
$scope.addToList = function() {
$scope.list.splice(1, 0, 4);
}
$scope.list = [1, 2, 3];
如果单击上面代码示例中的按钮,则$ scope.last在指令中为false,该指令应在渲染完成时触发。
答案 0 :(得分:1)
angular.module('fooApp')
.directive('onLastRepeat', function () {
return function (scope, element, attrs) {
if (scope.$middle) {
setTimeout(function () {
scope.$emit('onRepeatMiddle', element, attrs);
}, 1);
}
if (scope.$last) {
setTimeout(function () {
scope.$emit('onRepeatLast', element, attrs);
}, 1);
}
};
})