AngularJS:在调用save()之后取消覆盖值$ resource对象;

时间:2014-01-24 13:56:06

标签: javascript angularjs rest

var User = $resource( 
  'http://test/index.php'
);

var user = User.get({id:'1'}); 
// GET: http://test/index.php?id=1
// server returns: { "login":"foo", "name":"bar", "mail":"baz"  }

user.name = "qux";
user.$save();
 // POST: http://test/index.php?id=1
 // server returns: { "login":"foo", "name":"bar", "mail":"qux"}

在这种情况下,当您调用save()用户对象时,属性将被来自服务器的属性替换。

但如果服务器响应如下:

{
  "errors":{
     "login":"too short",
     "name":"is already using that name.",
     "mail":"invalid email."
  }
}

会覆盖用户对象属性,而是会出现包含这些错误的属性错误。

有没有办法改变$resource的行为?我想检查响应的状态,并在此基础上决定是更新对象的属性还是向用户报告错误。

1 个答案:

答案 0 :(得分:5)

Angular的$resource旨在与RESTful Web服务进行交互。

在RESTful Web服务中,如果在保存资源时出错,则应返回适当的HTTP状态(例如,400)。

然后,您可以选择使用错误回调:

user.$save(function (response) {
    console.log("success!");
}, function (response) {
    console.log("error");
});

有关错误HTTP状态的完整列表: http://en.wikipedia.org/wiki/List_of_HTTP_status_codes#4xx_Client_Error