J'essaie de comprendre AngularJS en utilisant $resource, mais la plupart des exemples que je vois n'expliquent pas comment créer de nouvelles instances de quelque chose en utilisant $resource (ou à quoi doit ressembler toute la configuration). J'ai posté mon code au bas de cette page.
J'ai la configuration suivante, où l'envoi d'un message à '/entry/api' doit créer une nouvelle entrée. L'objet entrée lui-même a trois propriétés : nom, description et id.
Je pensais qu'appeler $scope.save() ; ferait deux choses :
- Mettez en correspondance les champs de saisie avec les données POST
- effectue une requête POST vers l'url définie dans la ressource $ (dans ce cas, '/entry/api').
Certains exemples que j'ai vus consistent à mettre manuellement en correspondance les données avec la ressource en tant que telle :
var entry = new Entry();
entry.name = $name; // defined in entryController
entry.description = $scope.description; // <-- defined in entryController
entry.$save()
Je pensais que cela n'était pas censé être nécessaire, puisque ces champs sont définis dans le html. Cette solution a pour résultat :
- Définition d'un modèle dans le backend
- Définition d'un modèle dans le front-end (le contrôleur d'entrée)
div
) - Ajout des valeurs du contrôleur d'entrée (entryController)
div
à la version JS du modèle et enfin l'enregistrer.
C'est peut-être la façon dont AngularJS fonctionne, mais je pensais que les champs de saisie dans le code html seraient automatiquement mappés.
Sinon, vous avez au moins 3 endroits dans le code à mettre à jour si vous ajoutez ou supprimez une propriété de votre modèle (backend).
Comment êtes-vous censé utiliser AngularJS avec $resource
pour enregistrer de nouveaux objets ?
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>