2014-01-20 127 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