2

在进行 Restangular api 调用后,我无法更新 ng-show。在从 api 获得响应后,我尝试使用 $appply,但出现“$digest already in progress”错误。

Restangular.one("registrants/" + $scope.registrant.id).customPUT($scope.registrant, "").then(function (response) {
        $scope.$apply(function () {
            $scope.registrant = response.registrant;
        });
});

并且在视图中

<span ng-show="registrant.checked_in">User is checked in</span>

<span ng-hide="registrant.checked_in">User is not checked in</span>

任何帮助是极大的赞赏!

4

2 回答 2

0

我做了一些简单的更改,可能会解决您的问题:

Restangular
  .one('registrants', $scope.registrant.id) // prepares base route /registrants/registrantId
  .customPUT($scope.registrant, '') // makes PUT on /registrants/registrantId with payload object $scope.registrant
  .then(function (response) {
    $scope.registrant = response.registrant;
  });

确保检查是否发出了实际请求(chrome dev tools / firebug 中的网络面板)。另外,检查您是否真的想要制作 PUT 而不是 PATCH:

Restangular
  .one('registrants', $scope.registrant.id) // prepares base route /registrants/registrantId
  .patch($scope.registrant) // makes PATCH on /registrants/registrantId with payload object $scope.registrant
  .then(function (response) {
    $scope.registrant = response.registrant;
  });

$apply 并不是真正需要的,因为只要 XHR 响应完全返回,回调就会在 $rootScope.apply() 中执行。

于 2013-11-27T15:16:58.553 回答
0

您始终可以通过以下方式解决此问题:

<span>User is {{registrant.checked_in ? '' : 'not '}}checked in</span>

或者:

<span>User is <span ng-hide="registrant.checked_in">not</span> checked in</span>
于 2013-11-27T15:58:24.710 回答