javascript - 更新 ng-repeat 中的嵌套对象

标签 javascript angularjs

我有一个“事件”数组,存储为 $scope.activities 。我在 ng-repeat 中迭代这些,并一路访问嵌套的值和对象。

其中一些嵌套对象具有与其关联的操作,例如“喜欢”和“回复”,然后调用我的后端并且应该更新 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 得到更新?

最佳答案

如果更简单的话,您可以将整个事件传递到函数中。

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

关于javascript - 更新 ng-repeat 中的嵌套对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19521452/

相关文章:

javascript - 在谷歌应用脚​​本中获取选定的值

javascript - 如何根据 JavaScript 中的条件返回字符串的不同变体?

html - 具有动态值和表达式的 ng-class

javascript - 可以改变php参数吗?从 Controller

javascript - react 导航 : Detect to which screen the app was navigated

php - 具有滑动功能的响应式照片墙画廊

javascript - 主 div 上方的 HTML 导航

javascript - Angularjs:更新从文件读取的内容到textarea

angularjs - 如何在 Jhipster 生成的项目中编辑实体并添加分页

javascript - 单元测试异步 Angular 指令