2

我有一系列“活动”存储为$scope.activities. 我在 ng-repeat 中迭代这些,沿途访问嵌套的值和对象。

其中一些嵌套对象具有与之关联的操作,例如“喜欢”和“rsvp'ing”,然后调用我的后端并应该更新 ng-repeat 中的值。该逻辑如下所示:

$scope.rsvpToEvent = function(eventId) {
            eventService.rsvp(eventId, $rootScope.user._id).then(function (data) {
                for (var i = 0; i < $scope.activities.length; i++) {
                    if($scope.activities[i].event) {
                        if($scope.activities[i].event._id == data._id) {
                            $scope.activities[i].event = data;
                            break;
                        }
                    }
                }
            },
            function (errorMessage) {
            });
        };

我也尝试过传递$index给函数并直接访问该活动,而不是使用 for 循环。

如果我 console.log 它会成功执行并更新值,但它不会更新 dom 或 ng-repeat 的值。我在另一个页面上使用了类似的逻辑并且它工作正常,所以我假设这是因为我正在尝试更新这样的嵌套对象(其他页面的逻辑不在嵌套对象上)。

其他类似的问题说这是范围没有更新的问题。但是,如果我将其包装$scope.$apply()或在之后调用它,我会收到“正在消化”错误。如果我尝试通过检查阶段来应用“安全”范围,那么它根本不会被调用,因为摘要已经在进行中。是否有另一种方法来确保 dom/ng-repeat 将得到更新?

4

1 回答 1

2

如果更容易,您可以将整个活动传递给函数。

<div ng-repeat="activity in activities" ng-click="rsvpToEvent(activity)"> 

然后你不需要循环或类似的东西。

$scope.rsvpToEvent = function(activity) {
        eventService.rsvp(activity.event._id, $rootScope.user._id).then(function (data) {
           activity.event = data;
        },
        function (errorMessage) {
        });
    };
于 2013-10-22T15:20:20.977 回答