javascript - angular js 在 watch 语句中恢复范围属性的更改

标签 javascript angularjs angularjs-scope

我有一个选择框,当它发生变化时会触发一个 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 函数的情况下恢复值?

最佳答案

使用 ng-change 将更改提交到服务器,如果放置失败则恢复为之前的值。

HTML

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

Controller

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

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

Plunker

关于javascript - angular js 在 watch 语句中恢复范围属性的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19550855/

相关文章:

javascript - 查找数组中最后一次出现某个值的索引

javascript - AngularJS - 使用异步响应更新范围值

javascript - 如何应用带过滤器的 ng-if 来过滤记录并在同一页面中呈现两个不同的 View ?

javascript - 错误 : container has not been made global - how to solve?

javascript - Angular 不从工厂获取数据

AngularJS : access scope object from parent to child

javascript - AngularJS - 更改 $scope 对象

javascript - Angular Controller 不控制台记录数据。然而,Service 正在传递数据。

angularjs - 在自定义指令的作用域绑定(bind) : AngularJS 中使用符号 '@' 、 '&' 、 '=' 和 '>'

javascript - ie7 无法使用 javascript 循环遍历字符串