AngularJS: cómo comunicar correctamente el método ebwteen Controller and Service

Solo soy un principiante en AngularJS. Estoy tratando de construir una llamada de método en mi servicio de datos Angular, al que paso un objeto que debe publicarse en el servidor. El nombre del servicio de datos es RequestsRepository y el nombre del controlador es EnterNewRequestCtrl. Mi servicio tiene un método "postServiceRequest", al que intento pasar mi objeto de datos para que se publique. Cuando llamo a este método desde el controlador, aparece el siguiente error: TypeError: Cannot call method 'postServiceRequest' of undefined at Scope.$scope.submitRequest (http://myhost.mydomain.com:9221/controllers/EnterNewRequestCtrl.js:9:28)

Aquí hay una lista completa tanto del servicio como del controlador.

El servicio:

frontEndApp.factory('requestsRepository', function ($http) {

   var postServiceRequest =  function (ServiceRequest) {
        $http({
            url: 'http://localhost:8080/api/Customers',
            method: "POST",
            data: ServiceRequest,
            headers: { 'Content-Type': 'application/json' }
        }).success(function (data, status, headers, config) {
            //$scope.persons = data; // assign  $scope.persons here as promise is resolved here 
            console.log("postServiceRequest SUCCESS");
        }).error(function (data, status, headers, config) {
            //$scope.status = status;
            console.log("postServiceRequest FAILURE: " + status);
        });
    }
});

Y ahora el controlador:

angular.module('frontEndApp').controller('EnterNewRequestCtrl',function ($scope, requestsRepository) {
    $scope.RequestorName;
    $scope.RequestorBusinessUnit;
    $scope.submitRequest = function () {
        var ServiceRequest = {
            requestorName: $scope.RequestorName,
            requestorBusinessUnit: $scope.RequestorBusinessUnit
        };
        requestsRepository.postServiceRequest(ServiceRequest);
    }
  });

¿Cuál es la forma correcta de implementar este controlador - llamada al método del servidor?

preguntado el 14 de febrero de 14 a las 01:02

1 Respuestas

Necesitas devolver un objeto con un postServiceRequest() método en él...

frontEndApp.factory('requestsRepository', function ($http) {

   var postServiceRequest =  function (ServiceRequest) {
        $http({
            url: 'http://localhost:8080/api/Customers',
            method: "POST",
            data: ServiceRequest,
            headers: { 'Content-Type': 'application/json' }
        }).success(function (data, status, headers, config) {
            //$scope.persons = data; // assign  $scope.persons here as promise is resolved here 
            console.log("postServiceRequest SUCCESS");
        }).error(function (data, status, headers, config) {
            //$scope.status = status;
            console.log("postServiceRequest FAILURE: " + status);
        });
    };
    return { postServiceRequest : postServiceRequest };
});

- Editar -

Una vez que lo haga funcionar, también debe cambiar postServiceRequest() para devolver la promesa de la llamada $http(), luego use esa promesa en su controlador para completar las variables en $scope...

var frontEndApp = angular.module('frontEndApp', []);

frontEndApp.factory('requestsRepository', function ($http) {

   var postServiceRequest =  function (ServiceRequest) {
        return $http({
            url: 'http://localhost:8080/api/Customers',
            method: "POST",
            data: ServiceRequest,
            headers: { 'Content-Type': 'application/json' }
        });
    };
    return { postServiceRequest : postServiceRequest };
});

frontEndApp.controller('EnterNewRequestCtrl',function ($scope, requestsRepository) {
    $scope.RequestorName;
    $scope.RequestorBusinessUnit;
    $scope.submitRequest = function () {
        var ServiceRequest = {
            requestorName: $scope.RequestorName,
            requestorBusinessUnit: $scope.RequestorBusinessUnit
        };
        requestsRepository.postServiceRequest(ServiceRequest)
            .success(function (data, status, headers, config) {
                //$scope.persons = data; // assign  $scope.persons here as promise is resolved here 
                console.log("postServiceRequest SUCCESS");
            }).error(function (data, status, headers, config) {
                //$scope.status = status;
                console.log("postServiceRequest FAILURE: " + status);
            });
    };
});

Respondido 14 Feb 14, 01:02

No se preocupe... puede haber algunos errores sutiles en el código, pero esa debería ser la idea. - antonio chu

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.