角度更新范围在视图问题上的属性

时间:2015-08-07 14:05:34

标签: angularjs

我的范围内有以下对象,其属性status默认为已打开

$scope.task = {
     status: 'OPENED'
}

我想要做的就是点击更改此状态。 Here is a simple scenario它应该如何运作。但是在我的真实项目请求中发送到服务器并更改数据库中的状态,因此需要一些时间。

基本上它看起来像这样:

$scope.changeStatus = function (task, status) {
        task.status = status;
        task.$update();
    };

因此,当我首先调用此方法时,我会更改$scope.task中的状态,并且会立即更改我的视图(由于双向数据绑定),但同时也会出现两个按钮。然后在几毫秒后第二个按钮消失了。我想知道解决它的最佳方法是什么?我应该创建范围对象的副本还是有其他方法吗?

1 个答案:

答案 0 :(得分:1)

我假设你在$ update()方法中使用$ resource。您可以使用函数返回的承诺。

  

值得注意的是,get,query和其他方法的成功回调在来自服务器的响应以及$ http header getter函数中传递

来自$resource @ angularjs.org

示例:

var User = $resource('/user/:userId', {userId:'@id'});
User.get({userId:123}, function(u, getResponseHeaders){
  u.abc = true;
  u.$save(function(u, putResponseHeaders) {
    //u => saved user object
    //putResponseHeaders => $http header getter
  });
});

所以在你的情况下:

$scope.changeStatus = function (task, status) {
        task.status = status;
        task.$update(function() { $scope.task.status = status });
    };