2016-01-01 62 views
1

我創建了一個helper服務來包裝$ http.get。

self.apiGet = function (url, success, failure, always) { 
 
      
 
      $http.get(url) 
 
       .then(function (result) { 
 
        success(result); 
 
        if (always != null) 
 
         always(); 
 
       }, function (result) { 
 
        if (failure != null) { 
 
         failure(result); 
 
        } 
 
        else { 
 

 
        } 
 
        if (always != null) 
 
         always(); 
 
       }); 
 
     }

以我的控制器類,調用getData(VAL)當數據不返回到視圖。我調試時從api返回數據。

$scope.getData = function (val) { 
 
     return helper.apiGet(url, 
 
      function (result) { 
 
       return result.data; 
 
      }); 
 
    };

+0

是您的角度應用程序,並在同一個域的API? – masnun

+0

他們不在同一個域中。我不認爲這是與csrf相關的,因爲我可以看到數據。我只是不知道爲什麼它返回到視圖。 – Chen

+0

你的意思是你在另一個應用程序(api)中啓用了'cors'? 'csrf'和'cors'是不同的,但我想你已經知道了。 – masnun

回答

4

你應該只使用承諾正常。所以服務就變成了:

self.apiGet = function(url) { 
    return $http.get(url).then(function(result) { 
     return result.data; 
    }); 
}; 

...並且它在控制器消耗是這樣的:

helper.apiGet(url).then(function(data) { 
    $scope.data = data; 
}); 
+0

我在我的視圖中使用Typeahead,它需要在我的控制器中調用函數,我不能只在這裏使用$ scope。 – Chen

+0

沒關係。問題是你只是從服務中返回承諾。然後,無論你需要什麼,你都可以使用它在你的情況下,你可以調用函數而不是'$ scope.data = data;'。 – dfsq