我正在开发我的第一个角度应用程序。但是我无法访问来自服务的控制器中的数据。 服务代码如下。
var BASE =“https://abc.com/”;
loginApp.factory('authFactory',function ($http,$location){
var factory ={};
factory.login= function (username ,password){
var loginData='{"emailId":"'+username+'","password":"'+password+'"}';
return $http({ url: BASE+'/login' ,
method: "POST",
data: loginData
}).success(function (results) {
console.log("in service" +results.token );
return results;
}).error(function () {
console.log("error occured");
var err = "error";
return err;
});
};
return factory;
});
我的控制器代码如下。
loginApp.controller ('LoginController',function ($scope, $rootScope, $location,authFactory){
$scope.submit= function (){
authFactory.login($scope.username, $scope.password).then(function (status) {
console.log("status is" +status.token);
});
};
});
我的问题是我能够从服务访问results.token但是如果我尝试从status.token访问控制器中的相同令牌,那么它将提供“undefined”。请帮助解决此问题。
答案 0 :(得分:0)
只需返回$ http承诺,在控制器中处理它:
在服务中:
return $http({ url: BASE+'/login' ,
method: "POST",
data: loginData
});
在控制器中:
authFactory.login($scope.username, $scope.password)
.success(function(status) {
console.log("status is" +status.token);
});
答案 1 :(得分:0)
我的建议是基于REST和基于承诺的角度模块Restangular,它可以让您轻松编写一些服务来传达您的API。例如,在您的情况下:
myModule.factory('authFactory', ['Restangular',
function(Restangular) {
return {
login: function(name, password) {
// post /login
return Restangular.all('login').post({"emailId":"'+name+'","password":"'+password+'"});
}
};
}
]);
更新:在你的控制器中,你应该在最后添加这个代码来调用函数
$scope.submit();