javascript - 使用默认值创建新的 Angular $resource?

标签 javascript angularjs ngresource

是否可以使用 new() 定义一个在创建时始终具有相同默认值的 Angular $resource

例如,如果我有以下资源定义:

var Drawer = $resource('/drawer/:drawerId', { drawerId: '@id'});

并且 Drawer 对象需要有一个“socks”属性,我希望它始终被初始化为一个空数组 [],也许还有一些其他的,比如 'timesOpened' 为 0,或者类似的东西那个。

唯一的方法是:

var newDrawer = new Drawer({ socks: [], timesOpened: 0});

我正在考虑在我为我的资源(我们称它为 drawerService)的同一个服务中定义一个默认/初始化对象,如下所示:

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'});

它仍然不理想,但它稍微干净一些,也是我能想到的完成您想要完成的事情的最不邪恶的方法。

关于javascript - 使用默认值创建新的 Angular $resource?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30462659/

相关文章:

javascript - AngularJS:使用路由记住复杂 View 的状态/设置

angularjs - 系统异常 : Call to Node module failed with error: Error: URLs requested via Http on the server must be absolute

javascript - 将变量添加到 Javascript 的替换函数

javascript - 如何正确回显 onclick ='function($var)'

javascript - 从 Angular JS 中的模块更新作用域变量

javascript - AngularJS - XX 不是一个函数

javascript - 如何防止 AngularJS 在 $resource 操作中对 GET 请求中的参数进行排序?

javascript - 如何正确调用我的工厂服务?

javascript - 如何将 JavaScript 中的字符串与 Geany 中的制表符和回车符连接起来?

javascript - 我在哪里可以在 jQuery 中制作像 Chartbeat.com 这样的圆形图表?