It is possible to define an Angular $resource
that has always the same default values on creation with new()
?
For example if I have the following resource definition:
var Drawer = $resource('/drawer/:drawerId', { drawerId: '@id'});
And the Drawer object needs to have a "socks" property that I want to be always initialized as an empty array []
, and maybe some others like 'timesOpened' to 0, or things like that.
The only way to do this would be like:
var newDrawer = new Drawer({ socks: [], timesOpened: 0});
I was thinking about defining in the same service I have for my resource (let's call it drawerService
) a default/initialization object like this:
defaultDrawer = { socks: [], timesOpened: 0};
And then when creating the resource:
//New drawer with defaults
var newDrawer = new drawerService.Drawer(drawerService.defaultDrawer);
//New drawer with defaults and some other initialization
var anotherDrawer = new drawerService.Drawer(angular.extend(drawerService.defaultDrawer, {material: 'plastic'});
Is this the only way of doing it?
You are correct, there is no easy way to do this; it is not a supported functionality in Angular. A cleaner way that you might do this is by creating a Drawer factory in your drawerService. It might look something like this:
angular.module('app').factory('drawerService', function() {
var Drawer = $resource('/drawer/:drawerId', { drawerId: '@id'});
function drawerFactory(options) {
var defaults = {
socks: [],
timesOpened: 0
};
options = angular.extend(defaults, options || {});
return new Drawer(options);
}
return {
Drawer: Drawer,
create: drawerFactory
};
});
This would allow you to create a new Drawer like so:
//New drawer with defaults
var newDrawer = drawerService.create();
//New drawer with defaults and some other initialization
var anotherDrawer = drawerService.create({material: 'plastic'});
It's still not ideal, but it is slightly cleaner and the least evil way I can think of accomplishing what you are trying to accomplish.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With