5

我有一个选择框,它在更改时触发 http PUT。

html:

<select ng-model='color'></select>

js:

$scope.$watch('color', function(newValue, oldValue) { 
    $http.put('...', {color: newValue})   
});

问题是,如果 http 请求由于某种原因失败,我希望选择框恢复到以前的值。

 $scope.$watch('color', function(newValue, oldValue) { 
    req = $http.put('...', {color: newValue})
    req.error(function(){
      $scope.color = oldValue  // will probably cause the $watch to get triggered again (bad)
    });   
});

这可能会导致 $watch 函数再次被触发,这是不可取的,因为它会触发不必要的 PUT。

如何在不再次触发 $watch 功能的情况下恢复值?

4

1 回答 1

8

用于ng-change将更改提交到服务器并在放置失败时恢复为先前的值。

html

<select ng-model='color' ng-change="changeColor()"></select>

控制器

 $scope.$watch('color', function(newValue, oldValue) { 
      $scope.previousColor = oldValue;
 });

 $scope.changeColor = function(){
    $http.put('...', {color:  $scope.color}).error(function(){
      $scope.color =  $scope.previousColor;
    });   
 };

普朗克

于 2013-10-23T19:43:46.317 回答