使用默认值创建新的 Angular $resource?
Creating new Angular $resource with default values?
可以使用 new()
?
定义一个 Angular $resource
在创建时始终具有相同的默认值
例如,如果我有以下资源定义:
var Drawer = $resource('/drawer/:drawerId', { drawerId: '@id'});
并且 Drawer 对象需要有一个 "socks" 属性,我希望它始终被初始化为一个空数组 []
,也许还有其他一些像 'timesOpened'到 0,或类似的东西。
唯一的方法是:
var newDrawer = new Drawer({ socks: [], timesOpened: 0});
我正在考虑在我的资源(我们称之为 drawerService
)相同的服务中定义一个 default/initialization 对象,如下所示:
defaultDrawer = { socks: [], timesOpened: 0};
然后在创建资源时:
//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 中创建抽屉工厂。它可能看起来像这样:
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'});
它仍然不理想,但它稍微干净一些,也是我能想到的完成您想要完成的事情的最不邪恶的方法。
我最近 运行 遇到了这个问题,这是 Google 上出现的第一个 post...提供的答案有效,但它非常混乱,并且改变你必须与你的 $resource 对象交互的方式。有一个更简单的方法:)
angular.module('app').factory('drawerService', function() {
var drawer = $resource('/drawer/:drawerId', { drawerId: '@id'});
drawer.prototype.socks = [];
drawer.prototype.timesOpened = 0;
return drawer;
}
然后您只需创建一个具有默认值的新对象,如下所示:
var drawer = new drawerService();
你也可以在这里传入你自己的参数...
var drawer = new drawerService({ material: 'plastic' });
希望这对以后的人有帮助:D
可以使用 new()
?
$resource
在创建时始终具有相同的默认值
例如,如果我有以下资源定义:
var Drawer = $resource('/drawer/:drawerId', { drawerId: '@id'});
并且 Drawer 对象需要有一个 "socks" 属性,我希望它始终被初始化为一个空数组 []
,也许还有其他一些像 'timesOpened'到 0,或类似的东西。
唯一的方法是:
var newDrawer = new Drawer({ socks: [], timesOpened: 0});
我正在考虑在我的资源(我们称之为 drawerService
)相同的服务中定义一个 default/initialization 对象,如下所示:
defaultDrawer = { socks: [], timesOpened: 0};
然后在创建资源时:
//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 中创建抽屉工厂。它可能看起来像这样:
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'});
它仍然不理想,但它稍微干净一些,也是我能想到的完成您想要完成的事情的最不邪恶的方法。
我最近 运行 遇到了这个问题,这是 Google 上出现的第一个 post...提供的答案有效,但它非常混乱,并且改变你必须与你的 $resource 对象交互的方式。有一个更简单的方法:)
angular.module('app').factory('drawerService', function() {
var drawer = $resource('/drawer/:drawerId', { drawerId: '@id'});
drawer.prototype.socks = [];
drawer.prototype.timesOpened = 0;
return drawer;
}
然后您只需创建一个具有默认值的新对象,如下所示:
var drawer = new drawerService();
你也可以在这里传入你自己的参数...
var drawer = new drawerService({ material: 'plastic' });
希望这对以后的人有帮助:D