我有一系列“活动”存储为$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 将得到更新?