Ce matin en voulant continuer mon "périple Angular", et en repensant au commentaire fait par Eric Taix, cf remarque dans la partie précédente "Service et $resource", je me suis aperçu que mon code n'était pas forcément élégant et que l'on pouvait faire plus simple et plus propre (c'est mon avis, c'est discutable et j'accepte d'en discuter).
Nous allons remplacer notre BooksServices
par une factory que nous appellerons Book
. Donc supprimer complètement le code de BooksServices
et remplacez le par:
booksApp.factory("Book", function($resource) {
return $resource("/books/:id", {id: '@id'},{
update: { method: 'PUT' , params: {id: '@id'}, isArray: false }
});
})
Déjà c'est beaucoup plus court ;)
Du coup il va y avoir un peu plus de code dans le contrôleur, mais à peine, et on évite mon mécanisme de callback précédent:
Notez bien le passage de paramètres avec Book
à la place de BooksServices
.
var MainCtrl = booksApp.controller("MainCtrl", function($scope, Models, Book) {
$scope.books = null;
$scope.levels = Models.levels();
$scope.getAllBooks = function() {
Book.query().$promise.then(
function(data) {
$scope.books = data;
},
function(error) {
console.log("getAllBooks", error);
}
)
}
$scope.createBook = function(book) {
Book.save(book).$promise.then(
function(data) {
$scope.getAllBooks();
},
function(error) {
console.log("createBook", error);
}
)
}
$scope.updateBook = function(book) {
Book.update({id: book._id}, book).$promise.then(
function(data) {
$scope.getAllBooks();
},
function(error) {
console.log("updateBook", error);
}
)
}
$scope.getBook = function(id) {
Book.get({id:id}).$promise.then(
function(data) {
console.log(data);
$scope.book = data;
},
function(error) {
console.log("getBook", error);
}
)
}
$scope.deleteBook = function(id) {
Book.delete({id: id}).$promise.then(
function(data) {
$scope.getAllBooks();
},
function(error) {
console.log("book delete ERROR", error);
}
)
}
$scope.getAllBooks()
});