2017-08-01 22 views
0

我想打電話給一家工廠產生從兩個不同的控制器 1.homeCtrl 2.savingsCtrl 令牌的工廠方法獨特的迴應,但M在這兩個地方獲得同樣價值無法得到所謂的在兩個不同的控制器

這裏是我的代碼

---工廠

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

的.success和.error部分不得在工廠。回調應該放在控制器中。 –

回答

-1

試試這個:

----工廠

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

     return {getToken: getToken} 
    }]); 

---- homeCtrl

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

     tokenFactory.getToken() 

     .success(function(data) { 

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

- --savingsCtrl

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

     tokenFactory.getToken() 

     .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) 
      }); 
     } 
    }]) 
+0

從工廠中刪除了成功和錯誤的方法...仍然沒有giivng獨特的標記 –

+0

對於每一篇文章,路徑「../api/v1/getToken」應該返回不同的標記;也許這是一個服務器端問題。 使用郵差測試它。 –

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

我測試了這一點,它的工作

相關問題