使用AngularJS修改对象位置只需一次

Modify object position with AngularJS works just one time

本文关键字:一次 AngularJS 修改 对象 位置 使用      更新时间:2023-09-26

我得到了一个对象数组$scope.postATraiter,还有一个函数,它为每个post提供一个随机的xy值。

 $scope.posAleatoire = function () {
        var w = window.innerWidth;
        var h = window.innerHeight;
        for (var i = 0; i < $scope.postsATraiter.length; i++) {
            var l = parseInt(Math.random() * (w - 200));
            var t = parseInt(Math.random() * (h - 200));
            $('#target'+i).css({
                'left': l + 'px',
                'top': t + 'px',
                'height' : '200px'
            })
        }
    }

这很好用,但前提是我在这个功能中使用它:

Posts.query({}, function() {
    $scope.postsATraiter = $scope.posts;
    $scope.posAleatoire();
});

这个函数是在每个函数之前调用的,她得到了我数据库中的所有帖子,并将其存储到$scope.postsATraiter中,如果我在代码中的另一个地方使用posAleatoire,它什么都不会做,为什么?

如果可以的话,我会发布HTML。

<div ng-repeat="post in posts track by post._id">
     <div id="target{{$index}}">

这是因为$scope.posAleatoire()依赖于$scope.postsATraiter,所以当您在该函数之外调用$scope.posAleatoire()时,如果您正在为$scope.postsATraiter赋值,则不会起作用。

在调用$scope.posAleatoire()之前,您必须验证$scope.postsATraiter是否具有某些值。