如何在使用工厂模式时创建空$资源

时间:2015-07-14 23:17:04

标签: javascript angularjs angularjs-resource

我在工厂模式中使用angular $ resource,它是注入的,所以我只需要在一个地方创建模板。这很有效。

我似乎无法找到有关如何创建新资源对象的任何文档。这是在需要保存时创建条件分支,因为我没有调用$ save()的对象。

例如:想象我有这个资源:

function( $scope, ... myWidget ) {

    $scope.widget = myWidget.get({id: 'myId'});
    $scope.save = function() {
        $scope.widget.$save(); // plus progress dialog error handling etc
    };
}

因此我的控制器可以轻松访问myWidget:

function( $scope, ... myWidget, mode ) {

    if (mode === 'create') {
        $scope.widget = {
            id: 'myNewId',
            property: <lots and lots of properties>
        };
    }
    else {        
        $scope.widget = myWidget.get({id: 'myId'});
    }

    $scope.save = function() {
        $scope.widget.$save(); // Not a $resource; $save() does not exist
    };
}

这是非常干净和令人敬畏的应有的。但是,如果我想创建一个新的,我需要创建和保存条件代码。

    if (mode === 'create') {
        $scope.widget = myWidget.new({
            id: 'myNewId',
            property: <lots and lots of properties>
        });
    }

显然,我可以将条件代码放在save()中,或者我可以将小部件作为参数传递,如myWidget.save($ scope.widget),但这似乎很蹩脚。是否没有简单的方法可以简单地从工厂创建新的$资源? IE:

    if (mode === 'create') {
        $scope.widget = $resource('/my/widget/:id');

这在功能上等同于:

{{1}}

但显然没有在工厂中复制资源代码。

当然,这样做有一些简单的语法。是

我正在使用AngularJS 1.3。我真的希望这是一个愚蠢的问题,因为它似乎是一个明显的用例。甚至Backbone也可以使用默认值创建一个新的REST支持对象。 :)非常感谢。

(也许问题应该是“如何使用angularjs工厂创建对象,就好像我是注射器一样?”)

1 个答案:

答案 0 :(得分:2)

您需要创建一个新的小部件:

if (mode === 'create') {
    $scope.widget = new myWidget();
    $scope.widget = {
        id: 'myNewId',
        property: <lots and lots of properties>
    };
}