无法从两个不同控制器中调用的工厂方法获得唯一响应

时间:2017-08-01 11:48:33

标签: angularjs

我正在尝试调用工厂从两个不同的控制器生成令牌 1.homeCtrl 2.savingsCtrl 但是在两个地方都得到相同的代币值

这是我的代码

---工厂

app.factory('tokenFactory', ['$http', function($http) { 
   return $http({
          method: 'POST', 
          url: "../api/v1/getToken", 
          headers : {
                    'Content-Type':'application/json',
                    'X-API-KEY':'04g4g00c04ks4sokgkoosg0kwww0cww4www0kc80',
                    'Authorization':"Basic cGVzYXZlQXBwOkNDNTVzV0FwUW0zYWxpazlLNTcwTTFXQ1RNOUJ1TmZS"
                },
          data: {"grant_type":"client_credentials"}
        })   .success(function(data) { 
              return data; 
            }) 
            .error(function(err) { 
              return err; 
            }); 
}]);

---- homeCtrl

app.controller('homeCtrl', ['$scope','tokenFactory', function($scope,tokenFactory){

  tokenFactory.success(function(data) {

    $scope.token = data;
    var token=data.access_token;
}])

---- savingsCtrl

app.controller('savingsCtrl', ['$scope','tokenFactory','savingsFactory', function($scope,tokenFactory,savingsFactory){

  tokenFactory.success(function(data) {
    $scope.token = data;
    var token=data.access_token;
    var userId='9c28735e-8a29-401d-b94e-6cc90a087d96';
    alert(token)
    $scope.getGoals=function(){

        savingsFactory.getGoals(userId,token).success(function(data) {
        $scope.goals = data;
            var goal=$scope.goals.goalName;
            alert(goal)
      });
    }

2 个答案:

答案 0 :(得分:0)

您应该使用某种方法返回$ http,而不是直接在工厂

 app.factory('tokenFactory', ['$http', function($http) { 
    var getToken = function(){
      return $http({
      method: 'POST', 
      url: "../api/v1/getToken", 
      headers : {
                'Content-Type':'application/json',
                'X-API-KEY':'04g4g00c04ks4sokgkoosg0kwww0cww4www0kc80',
                'Authorization':"Basic cGVzYXZlQXBwOkNDNTVzV0FwUW0zYWxpazlLNTcwTTFXQ1RNOUJ1TmZS"
            },
      data: {"grant_type":"client_credentials"}
    })   .success(function(data) { 
          return data; 
        }) 
        .error(function(err) { 
          return err; 
        }); 
   }
return {
     getToken : getToken
   }

}]);

然后在像这样的控制器中使用它

  tokenFactory.getToken().then(function (data) {

            $scope.token = data.data.access_token;
            var token = data.data.access_token;
            alert(token);
        });

我测试了这个及其工作

答案 1 :(得分:-1)

试试这个:

----工厂

Invoke-WebRequest

---- homeCtrl

Expand-Archive

---- savingsCtrl

-PassThru