我有一个“事件”数组,存储为 $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/