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