更新 ng 重复中的嵌套对象

Update nested object within ng-repeat

本文关键字:嵌套 对象 ng 更新      更新时间:2023-09-26

>我有一个存储为$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 循环。

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

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

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

<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) {
        });
    };