Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.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 如何在使用factory模式时创建空的$资源_Javascript_Angularjs_Angularjs Resource - Fatal编程技术网

Javascript 如何在使用factory模式时创建空的$资源

Javascript 如何在使用factory模式时创建空的$资源,javascript,angularjs,angularjs-resource,Javascript,Angularjs,Angularjs Resource,我在工厂模式中使用angular$resource,在这里它被注入,所以我只需要在一个地方创建一次模板。这很有效 我似乎找不到任何关于如何创建新资源对象的文档。这会在需要保存时创建条件分支,因为我没有调用$save()的对象 例如:假设我拥有以下资源: myService.factory('myWidget', [ '$resource', function($resource){ return $resource('/my/widget/:id', { [...] 因此,我的

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

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

例如:假设我拥有以下资源:

myService.factory('myWidget', [ '$resource',
  function($resource){
    return $resource('/my/widget/:id', {
  [...]
因此,我的控制器可以轻松访问myWidget:

function( $scope, ... myWidget ) {

    $scope.widget = myWidget.get({id: 'myId'});
    $scope.save = function() {
        $scope.widget.$save(); // plus progress dialog error handling etc
    };
}
这是非常干净和可怕的,因为它应该是。然而,如果我想创建一个新的,我需要创建和保存条件代码

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
    };
}
但显然没有在工厂里复制资源代码

当然有一些简单的语法可以做到这一点。是吗

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


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

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

if (mode === 'create') {
    $scope.widget = new myWidget();
    $scope.widget = {
        id: 'myNewId',
        property: <lots and lots of properties>
    };
}
if(模式=='create'){
$scope.widget=newmywidget();
$scope.widget={
id:“myNewId”,
财产:
};
}

大部分逻辑需要放在服务中,并从服务返回的不仅仅是
$resource
。围绕
$resource
包装一个函数,并可以通过传入参数来创建多个
$resource
。换言之,将服务视为一个完整的CRUD工厂。它可能这么简单吗?显然是的除第二行外,覆盖新对象的值应为
$scope.widget.id='myNewId'我想。可能有一种很好的方法可以将一个匿名对象/散列值传递给“new”调用,但我还没有想出神奇的咒语。(太晚了,无法编辑!)
    if (mode === 'create') {
        $scope.widget = $resource('/my/widget/:id');
if (mode === 'create') {
    $scope.widget = new myWidget();
    $scope.widget = {
        id: 'myNewId',
        property: <lots and lots of properties>
    };
}