angularjs:当在中间添加行时ng-repeat完成时检测

时间:2014-10-09 08:42:17

标签: javascript angularjs

发布的每个解决方案都涉及检测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,该指令应在渲染完成时触发。

1 个答案:

答案 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);
        }
    };
})