我正在开发一个AngularJS应用程序。我有loginService.js文件,它定义了登录服务,如下所示:
(function () {
var loginService = function ($http) {
var login = function (userName, loginPassword) {
var data = "grant_type=password&username=" + userName + "&password=" + loginPassword;
$http.post("/Token", data, { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } })
.then(function (response) {
return response.data;
});
};
return {
login: login
};
};
var module = angular.module("MyApp");
module.factory("loginService", loginService);
}());
和javascript中的LoginController定义如下:
(function () {
var app = angular.module("kanbanBoard");
var LoginController = function ($scope, $location, loginService, localStorageService) {
var loginData = {
userName: "",
loginPassword: ""
};
$scope.loginData = loginData;
var onLoginComplete = function (data) {
alert(data);
localStorageService.set('authorizationData', { token: response.access_token, userName: userName });
//$location.url("/");
};
var onError = function (result) {
alert(result);
$scope.error = result;
}
$scope.login = function () {
loginService.login($scope.loginData.userName, $scope.loginData.loginPassword)
.then(onLoginComplete, onerror);
}
};
app.controller("LoginController", LoginController);
}());
我无法获得财产'然后'在LoginController.js文件中的未定义或空引用。到目前为止,我理解的loginService类应该返回在LoginController中处理的promise。我不确定我在这做什么错。
答案 0 :(得分:1)
您需要在登录函数中返回$ http.post中的承诺:
return $http.post("/Token", data, { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } })
.then(function (response) {
return response.data;
});
否则返回void,因此(null).then()会导致你提到的错误。
答案 1 :(得分:1)
您在$http.post
的调用中未返回accountManager.login(...)
的值,因此它将返回undefined
,这肯定不是当时的能力。