Angularjs 角度工厂通过$q promis返回令牌
我试图创建一个工厂,将令牌返回给控制器。此代码仅在从服务器获取令牌时有效,但不会将令牌传递回控制器。令牌在控制器中返回为空。请告知。多谢各位Angularjs 角度工厂通过$q promis返回令牌,angularjs,angular-promise,Angularjs,Angular Promise,我试图创建一个工厂,将令牌返回给控制器。此代码仅在从服务器获取令牌时有效,但不会将令牌传递回控制器。令牌在控制器中返回为空。请告知。多谢各位 securityApp.factory("getTokenFromServer", function ($http, $q) { var token; function getToken(userName, password) { var deferred = $q.defer(); $ht
securityApp.factory("getTokenFromServer", function ($http, $q) {
var token;
function getToken(userName, password) {
var deferred = $q.defer();
$http({
method: 'POST', url: 'http://localhost:62791/token', data: { username: userName, password: password, grant_type: 'password' }, transformRequest: function (obj) {
var str = [];
for (var p in obj)
str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
return str.join("&");
}
}).then(function (data) {
token = data.access_token;
deferred.resolve(token);
});
return deferred.promise;
}
return {
getToken: getToken
};
});
securityApp.controller('membersController', function ($scope, $http, getTokenFromServer) {
$scope.username = 'aharris1@test.com';
$scope.password = 'SuperPass1!';
getTokenFromServer.getToken($scope.username, $scope.password).then(function (data) {
$scope.token = data;
alert($scope.token);
$http({ method: 'GET', url: '/api/Members/?access_token=' + $scope.token, headers: { 'Authorization': 'Bearer ' + $scope.token } })
.then(function (response) {
$scope.members = response.data;
});
});
});
这是因为您没有以正确的方式访问数据。当使用
时,则
承诺链的结果是数据、状态等的组合。。(当与成功回调相反时,成功回调会分解片段并将数据作为第一个参数提供给您)因此我认为您应该查找result.data.access\u token
,而不是result.access\u token
.then(function (result) {
token = result.data.access_token;
deferred.resolve(token);
});
有了这些,您只需简化api方法即可返回http promise本身,而无需创建延迟对象:-
securityApp.factory("getTokenFromServer", function ($http, $q) {
function getToken(userName, password) {
return $http({
method: 'POST', url: 'http://localhost:62791/token', data: { username: userName, password: password, grant_type: 'password' }, transformRequest: function (obj) {
var str = [];
for (var p in obj)
str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
return str.join("&");
}
}).then(function (result) {
return result.data.access_token; //Return the data
}, function(errorResponse) {
return $q.reject(errorResponse.data);//Reject or return
});
}
return {
getToken: getToken
};
});