Goodnickoff
Goodnickoff

Reputation: 2267

AngularJS: Cancel overwriting values $resource object after calling save ();

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"}

In this case, when you call the save() user object, properties will be replaced by those that came from the server.

But if the server responds like this:

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

User object properties are overwritten and instead, property errors containing these mistakes will come up.

Is there a way to change the behavior of $resource? I would like to check the status of the response and, based on that, decide whether to update the properties of an object or report an error to the user.

Upvotes: 1

Views: 381

Answers (1)

Alon Gubkin
Alon Gubkin

Reputation: 57149

Angular's $resource is meant to interact with RESTful web services.

In RESTful web services, if there's an error while saving a resource, you should return an appropriate HTTP status (for example, 400).

Then, you can optionally use the error callback:

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

For a full list of error HTTP statuses: http://en.wikipedia.org/wiki/List_of_HTTP_status_codes#4xx_Client_Error

Upvotes: 5

Related Questions