Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用默认值创建新的Angular$资源?_Javascript_Angularjs_Ngresource - Fatal编程技术网

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,很抱歉没有早点来这里。所以你的答案是我所发布内容的一个改进和更清晰的版本:)我喜欢它,但我会多留一点时间,以防有其他想法出现。如果没有,我会把你的答案标为正确答案!非常感谢你!这不符合预期。原型成员将是“静态”的,即所有实例的共享访问。应仅用于函数。