Crear un libro

Llamada al servicio en AngularJS

Para crear un libro en la interfaz de la aplicación web se llena un formulario que tiene un campo asociado para:

  • Cada atributo de la entidad
  • Relaciones muchos a uno o uno a uno (en este caso con Editorial)
  • Relaciones composite (en este caso con Review)

Los datos ingresados en este formulario, se mapean a un objeto javascript (llamado currentRecord que se encuentra en el scope del controlador de book) con la representación Full.

Cuando se hace clic en Save en la interfaz de Book, esta invoca la función saveRecord del controlador, cuya responsabilidad es enviar al backend los datos del book a crear, y definir el comportamiento de la vista una vez se reciba la respuesta.

Para realizar la petición al backend, el controlador llama la función saverecord de bookService. El resultado de esta función es un [promise][cg], el cual permite definir las acciones a realizar una vez se reciba respuesta del servidor.

this.saveRecord = function () {
    return svc.saveRecord($scope.currentRecord).then(function () {
        self.fetchRecords();
    }, responseError);
};

Cuando la respuesta es exitosa, se ejecuta la función fetchRecords del controlador, la cual se encarga de listar los registros de book, incluyendo el que se acaba de crear. Cuando la respuesta que se recibe no es exitosa (es decir código de error 4xx o 5xx), se ejecuta la función pasada como segundo parámetro, en este caso responseError. Para más información sobre esta función ver [conceptos generales][cg]

Envío de petición con $http

Cuando se invoca la función saveRecord de bookService, esta valida si el dato a enviar tiene asignada la propiedad id, cuyo valor determina si se hará una petición PUT (si id está definido) o POST (si id no está definido). Ambas peticiones incluyen en el cuerpo del mensaje un string en formato JSON con los atributos de book.

La petición con método PUT incluye al final de la URL el ID del book a actualizar. Por ejemplo: /books/1.

mod.service("bookService", ["$http", "bookContext", "$log", function ($http, context, $log) {
    // ...

    this.saveRecord = function (currentRecord) {
        if (currentRecord.id) {
            return $http.put(context + "/" + currentRecord.id, currentRecord);
        } else {
            return $http.post(context, currentRecord);
        }
    };

    // ...
}]);

Este método retorna un promise para ser utilizado por cualquiera que lo invoque.

La variable context se define en una constante del módulo bookModule llamada bookContext y define la URL base a la cual debe hacerse la petición. Esto se encuentra en el archivo book.mod.js.

(function (ng) {
    var mod = ng.module("bookModule", ["ui.bootstrap", "ngMessages"]);
    mod.constant("bookContext", "api/books"); // Definición de bookContext
})(window.angular);

results matching ""

    No results matching ""