我的范围内有以下对象,其属性status
默认为已打开
$scope.task = {
status: 'OPENED'
}
我想要做的就是点击更改此状态。 Here is a simple scenario它应该如何运作。但是在我的真实项目请求中发送到服务器并更改数据库中的状态,因此需要一些时间。
基本上它看起来像这样:
$scope.changeStatus = function (task, status) {
task.status = status;
task.$update();
};
因此,当我首先调用此方法时,我会更改$scope.task
中的状态,并且会立即更改我的视图(由于双向数据绑定),但同时也会出现两个按钮。然后在几毫秒后第二个按钮消失了。我想知道解决它的最佳方法是什么?我应该创建范围对象的副本还是有其他方法吗?
答案 0 :(得分:1)
我假设你在$ update()方法中使用$ resource。您可以使用函数返回的承诺。
值得注意的是,get,query和其他方法的成功回调在来自服务器的响应以及$ http header getter函数中传递
示例:
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 });
};