无法从工厂访问控制器中的数据

时间:2014-05-09 08:37:08

标签: angularjs

我正在开发我的第一个角度应用程序。但是我无法访问来自服务的控制器中的数据。 服务代码如下。

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”。请帮助解决此问题。

2 个答案:

答案 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();