AngularJS 1.7 - HTTP POST - PullRequest
       14

AngularJS 1.7 - HTTP POST

0 голосов
/ 10 февраля 2019

Обновление до angularjs версии 1.7 и этот код не компилируется

app.factory('LoginService', function ($http) {
        return {
            login: function (param, callback) {
                $http.post(url, param)
                   .success(callback)
                   .error(function (data, status, headers, config) {
                   });
            }
        };
    });

На контроллере я звоню в сервис LoginService

    function LoginController($http, $location, LoginService, blockUI) {
    var vm = this;
    LoginService.usuario(
          {login: vm.username, clave: vm.password},
      function (data, status, headers, config) {                
              vm.resultado = data;
              if (vm.resultado == "True") {
                  window.location = "/Home/Index";
              } else {
                  vm.error = 'Usuario o password incorrecto';
              }
          });
};

Хочу узнать, как работает функциявызывается из контроллера, потому что он реализовал службу http.post, используя .then

app.factory('LoginService', function ($http) {
        return {
            login: function (data) {
                $http.post(url, data)
                    .then(function (resultado) {
                        debugger;
                        if (resultado.data === "True") {
                            return resultado.data;}
                        else {
                              console.log("NO");}
                         });
                       }};
                      });

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

решение будет таким:

function LoginController($scope,$window,$q,LoginService) {

$scope.fnBusqueda = function () {
    var promesas = [
      obtenerLogin()
    ];

    $q.all(promesas).then(function (promesasRes) {
        var oArrayResponse = promesasRes;
        if ((oArrayResponse.length > 0)) {
            $scope.respuesta = oArrayResponse[0];
            if ($scope.respuesta == "True") {
                window.location = "/Home/Index";
            } else {
                $cope.error = 'Usuario o password incorrecto';
            }
        }
    });


};

function obtenerLogin() {
    var defered = $q.defer();
    var promise = defered.promise;
    LoginService.login(url_valida_login, '{login:X,clave:X}').then(function (response) {
        defered.resolve(response);
    }).catch(function (data) {
        defered.resolve([]);
    })
    return promise;
}

}

0 голосов
/ 11 февраля 2019

Я предлагаю вам ознакомиться с сервисом AngularJS $ q и его API Promise.

Вам LoginService.login(...) метод должен вернуть Promise из $http.post(...):

app.factory('LoginService', function ($http) {
    return {
        login: function (data) {
            return $http.post(url, data)
                .then(function(response) {
                    return response.data;  
                });
        });

Затем ваш Контроллер может получить доступ к возвращенным данным через разрешенное Обещание:

function LoginController(LoginService) {
var vm = this;
LoginService.login({login: vm.username, clave: vm.password})
    .then(function (result) {
        // handle result here...
      });
...