Я пытаюсь понять AngularJS с использованием $resource, однако большинство примеров, которые я вижу там, не объясняют, как на самом деле создавать новые экземпляры чего-либо с помощью $resource (или как должна выглядеть вся установка), Я разместил свой код внизу.
У меня есть следующая настройка, где размещение в /entry/api должно создать новую запись. Объект записи сам имеет три свойства: имя, описание и идентификатор.
Я думал, что вызов $ Scope.save(); будет делать две вещи:
- Сопоставьте поля ввода как данные POST
- сделать запрос POST на url, определенный в ресурсе $(в данном случае '/entry/api')
Некоторые примеры, которые я видел, вручную сопоставляют данные с ресурсом как таковым:
var entry = new Entry();
entry.name = $name; // defined in entryController
entry.description = $scope.description; // <-- defined in entryController
entry.$save()
Я думал, что это не должно быть необходимым, так как эти поля определены в html. Это решение приводит к:
- Определение модели в бэкэнд
- Определение модели в интерфейсе (entryController
div
) - Добавление значений из элемента entryController
div
в JS-версию модели и затем, наконец, ее сохранение.
Это может быть способ работы AngularJS, однако я думал, что поля ввода в html будут автоматически отображены.
В противном случае у вас есть как минимум 3 места в обновляемом коде, если вы добавите или удалите свойство вашей (бэкэнд) модели.
Как вы можете использовать AngularJS вместе с $resource
для сохранения новых объектов?
angular.module('entryManager', ['ngResource']);
function pollController($scope, $resource) {
$scope.polls = $resource('/entry/api/:id', {id: '@id'});
$scope.saveEntry = function() {
this.save();
}
}
<html ng-app="entryManager">
... <-- include angularjs, resource etc.
<div ng-controller="entryController">
<input type='text' ng-model="name"><br/>
<textarea ng-model="description" required></textarea><br/>
<button class="btn btn-primary" ng-click="saveEntry()">Save</button>
</div>