Как создать пустой $ ресурс при использовании фабричного шаблона
Я использую 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
};
}
Очевидно, я могу поместить условный код в save () или передать виджет в качестве параметра, как myWidget.save($scope.widget), но это выглядит неубедительно. Нет ли простого способа создать новый $ ресурс с фабрики? IE:
if (mode === 'create') {
$scope.widget = myWidget.new({
id: 'myNewId',
property: <lots and lots of properties>
});
}
Это будет функционально эквивалентно:
if (mode === 'create') {
$scope.widget = $resource('/my/widget/:id');
Но, очевидно, без дублирования кода ресурса на заводе.
Конечно, есть некоторый простой синтаксис для этого. Да?
Я использую AngularJS 1.3. Я действительно надеюсь, что это глупый вопрос, так как кажется, что это очевидный вариант использования. Даже в Backbone есть способ создать новый объект с поддержкой REST со значениями по умолчанию.:) Большое спасибо.
(Может быть, вопрос должен звучать так: "Как мне создать объект, используя фабрику angularjs, как если бы я был инжектором?")
1 ответ
Вам нужно создать новый виджет:
if (mode === 'create') {
$scope.widget = new myWidget();
$scope.widget = {
id: 'myNewId',
property: <lots and lots of properties>
};
}