2016-01-01 4 views
1

Я создал вспомогательную службу для обертывания $ 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

Каково ваше угловое приложение и апи на том же домене? – 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

Смежные вопросы