Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 无法从工厂访问控制器中的数据_Angularjs - Fatal编程技术网

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

Angularjs 无法从工厂访问控制器中的数据,angularjs,Angularjs,我正在开发我的第一个Angle应用程序。但我无法访问控制器中来自服务的数据。 服务代码如下 loginApp.controller ('LoginController',function ($scope, $rootScope, $location,authFactory){ $scope.submit= function (){ authFactory.login($scope.username, $scope.password)

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

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);
                    });
            };

});
var BASE=“”

我的控制器代码如下

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

只需返回$http承诺,在控制器中处理它:

authFactory.login($scope.username, $scope.password)
.success(function(status) {
                    console.log("status is" +status.token);
                });
在职:

return $http({ url: BASE+'/login' ,
                   method: "POST",
                   data:  loginData
        });
在控制器中:

authFactory.login($scope.username, $scope.password)
.success(function(status) {
                    console.log("status is" +status.token);
                });

我的建议是一个基于REST和基于承诺的angular模块,它可以让您轻松编写一些服务来通信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();

您的服务器端代码是什么?您是否可以只记录
状态
,或者该状态是否也未定义?回答此问题的一个重要部分(对于刚接触Angular和promises的人来说很常见)是解释
$http
使用Promission来管理异步请求。因此,当
login
使用
return$http(…)
返回时,它将返回一个承诺,控制器可以使用上面的示例连接到该承诺以检索结果值。新手经常做OP上面所做的事情,认为从
.success
函数返回将使
登录
返回响应结果。事实并非如此。虽然Restangular是一个漂亮的库,我自己也在使用,但这并不能解决问题。您还应该解释如何将该数据传送到控制器