我在工厂模式中使用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工厂创建对象,就好像我是注射器一样?”)
答案 0 :(得分:2)
您需要创建一个新的小部件:
if (mode === 'create') {
$scope.widget = new myWidget();
$scope.widget = {
id: 'myNewId',
property: <lots and lots of properties>
};
}