2014-01-20 129 views
1

我从angularJS开始,我不知道如何将控制器中的变量推送到服务。 我尝试用$ rootScope但变量的值是不确定的AngularJS将变量传递给服务

这里是我的服务:

technoServices.factory('Config',['$rootScope','$resource', 
    function($rootScope,$resource,token){ 

return $resource('../../rest/config',null,{ 
    get: { 
     method:'GET', 
     headers:{'X-Token':""+$rootScope.headers}, 
     isArray:false} 
}); 
}]); 

,这里是我的控制器:

var technoControllers = angular.module('technoControllers', []); 

technoControllers.controller('loginCtrl', ['$scope','$rootScope', 'Techno',function($scope,$rootScope, Techno) { 
$scope.getXtoken = function (user,psw){ 
    $scope.config = Techno.post({username:user,password:psw},function(response,headers){ 
     $scope.status= response.status; 
     $rootScope.headers = headers('X-Token'); 
     if($rootScope.headers != null){ 
      $scope.log = true; 
     }else{ 
      $scope.log = false; 
     } 
    })}; 

} 

    ]); 

technoControllers.controller('configCtrl', ['$scope', 'Config', function($scope, Config) { 

$scope.getConfig = function(){ 
$scope.maConfig = Config.get(); 

} 

因此,大家可以看到,我需要我的第一个服务的响应头中的变量在我的seconde服务的头部请求中。我该怎么做 ?

回答

0

您可以使用另一项服务作为共享服务,它将具有该值并注入控制器和服务。代码片段会是这样的。

technoServices.factory('Shared', 
    function(){ 
var Shared={}; 
Shared.setValue=function(header){ 
Shared.header = header; 
} 
Shared.getValue=function(){ 
return Shared.header; 
} 
return Shared; 
}); 

并在控制器,你可以为

technoControllers.controller('loginCtrl', ['$scope','$rootScope', 'Techno',function($scope,$rootScope, Techno, Shared) { 
$scope.getXtoken = function (user,psw){ 
    $scope.config = Techno.post({username:user,password:psw},function(response,headers){ 
     $scope.status= response.status; 
     Shared.setValue(headers('X-Token')); 
     //$rootScope.headers = headers('X-Token'); 
     if($rootScope.headers != null){ 
      $scope.log = true; 
     }else{ 
      $scope.log = false; 
     } 
    })}; 

} 

    ]); 

使用您可以配置注入共享服务来获取数据

technoServices.factory('Config',['$rootScope','$resource','Shared' 
    function($rootScope,$resource,token,Shared){ 

return $resource('../../rest/config',null,{ 
    get: { 
     method:'GET', 
     //headers:{'X-Token':""+$rootScope.headers}, 
     headers:{'X-Token':""+Shared.getValue()}, 
     isArray:false} 
}); 

}]);

+0

我尝试你的解决方案,但我得到这个错误:TypeError:不能调用未定义的方法'getValue' – user3214296

+0

你能检查服务的顺序吗?共享应在Config之前定义。 –

+0

共享是Config之后,现在我定义了它之前,但我仍然得到了相同的错误 – user3214296