我有一系列“活动”存储为$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的值。我在另一个页面上使用类似的逻辑并且工作正常,所以我假设这是因为我正在尝试更新这样的嵌套对象(另一个页面的逻辑不在嵌套对象上)。 / p>
其他类似的问题表明,范围没有得到更新是一个问题。但是,如果我将其包装在$scope.$apply()
中或之后调用它,我会得到“摘要已在进行中”错误。如果我尝试通过检查阶段来执行“安全”范围应用,则根本不会调用它,因为摘要已在进行中。还有另一种方法可以确保dom / ng-repeat更新吗?
答案 0 :(得分: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) {
});
};