Javascript 使用默认值创建新的Angular$资源?
可以定义角度Javascript 使用默认值创建新的Angular$资源?,javascript,angularjs,ngresource,Javascript,Angularjs,Ngresource,可以定义角度$resource,该资源在使用new()创建时始终具有相同的默认值 例如,如果我有以下资源定义: var Drawer = $resource('/drawer/:drawerId', { drawerId: '@id'}); 抽屉对象需要有一个“socks”属性,我希望它总是被初始化为一个空数组[],可能还有一些类似于“timesOpen”到0之类的东西 唯一的方法是: var newDrawer = new Drawer({ socks: [], timesOpened: 0
$resource
,该资源在使用new()
创建时始终具有相同的默认值
例如,如果我有以下资源定义:
var Drawer = $resource('/drawer/:drawerId', { drawerId: '@id'});
抽屉对象需要有一个“socks”属性,我希望它总是被初始化为一个空数组[]
,可能还有一些类似于“timesOpen”到0之类的东西
唯一的方法是:
var newDrawer = new Drawer({ socks: [], timesOpened: 0});
我正在考虑在为我的资源提供的同一服务(我们称之为drawerService
)中定义一个默认/初始化对象,如下所示:
defaultDrawer = { socks: [], timesOpened: 0};
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
};
});
然后在创建资源时:
//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'});
这是唯一的方法吗?你是对的,没有简单的方法可以做到这一点;它在Angular中不受支持。一种更简洁的方法是在drawerService中创建一个抽屉工厂。它可能看起来像这样:
defaultDrawer = { socks: [], timesOpened: 0};
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
};
});
这将允许您创建一个新抽屉,如下所示:
//New drawer with defaults
var newDrawer = drawerService.create();
//New drawer with defaults and some other initialization
var anotherDrawer = drawerService.create({material: 'plastic'});
它仍然不理想,但它稍微干净了一点,是我能想到的实现你想要实现的目标的最不邪恶的方式。我最近遇到了这个问题,这是谷歌上出现的第一篇帖子。。。提供的答案是可行的,但是它相当混乱,并且改变了您与$resource对象交互的方式。有一种更简单的方法:) 然后您只需创建一个新对象,默认值如下:
var drawer = new drawerService();
你也可以在这里传递你自己的参数
var drawer = new drawerService({ material: 'plastic' });
希望这能对将来的人有所帮助:D嘿@kanzelm3,很抱歉没有早点来这里。所以你的答案是我所发布内容的一个改进和更清晰的版本:)我喜欢它,但我会多留一点时间,以防有其他想法出现。如果没有,我会把你的答案标为正确答案!非常感谢你!这不符合预期。原型成员将是“静态”的,即所有实例的共享访问。应仅用于函数。