Обновите до версии 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.info("NO");}
});
}};
});


Я предлагаю вам ознакомиться с AngularJS $q сервис и его Promise API.
Ваш метод 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...
});
Спасибо за ответ, но я получаю сообщение об ошибке в строке «тогда» контроллера «Невозможно прочитать свойство затем неопределенного al loginController», я буду искать промисы, как вы мне рекомендовали.
Я предполагаю, что вы пропустили return в своем LoginService. Эта ошибка говорит вам, что вещь, с которым вы вызываете .then(), — это undefined, что является возвращаемым значением LoginService.login(). Убедитесь, что у вас есть: return $http.post(...).
решение будет таким:
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;
}
}
В коде, который вы предоставили, есть некоторые несоответствия. Рефакторинговая версия LoginService для
.thenпредоставляет функцию с именем «логин», однако ваш контроллер вызываетLoginService.usario?