2015-01-08 2 views
1

Борьба с материалом API весь день и решила использовать Restanglar. На самом деле возникают проблемы с получением данных и в $ scope.

Я понимаю, что это будет не просто JSON, который возвращается из API, но и куча других внутренних методов и т. Д. Но когда я получаю данные, я могу увидеть, как он где-то находится в отладке с помощью console.log, но я не могу представить его в $ scope, чтобы использовать его в своем представлении, которое раньше работало нормально.

Как я могу получить эти данные в свой $ scope, и поэтому мой взгляд?

Модель

angular.module('horse', ['restangular']) 
    .config(function(RestangularProvider) { 
     RestangularProvider.setBaseUrl('http://url/api'); 

     RestangularProvider.setResponseInterceptor(
      function(data, operation, what) { 
      if (operation == 'getList') { 
       return data[what]; 
      } 
      return data; 
     }); 
}); 

Контроллер

angular 
    .module('horse') 
    .controller("IndexController", function ($scope, Restangular) { 
    $scope.horse = null; 
    $scope.showSpinner = true; 

    Restangular.all('horse').getList().then(function(horse) { 
     $scope.horse = horse; 
     console.log($scope.horse); 
    }); 
}); 

ответ API

{"error":false,"horse":[{"id":"1","name":"horse 2"},{"id":"2","name":"horse 2"}]} 

Edit 1

Restangular ответ

[Object, Object, route: "horse", getRestangularUrl: function, getRequestedUrl: function, addRestangularMethod: function, clone: function…] 

Restangular expanded console.log output

Edit 2

Я также попытался это - https://github.com/mgonto/restangular#using-values-directly-in-templates

$scope.horse = Restangular.all('horse').getList().$object;

Это приводит к выходу пустого массива. Я также попытался удалить setResponseInterceptor и изменить структуру api, чтобы получить массив данных непосредственно без метафайла (ошибка и т. Д.), Без радости :(

ответ

1

Данные, кажется, проходят через. Я замечаю, что вы используете Steroids, вы проверили разметку, а не только консоль?

Убедитесь, что значение параметра spinner равно false, чтобы гарантировать, что прядильщик будет скрыт, когда данные пройдут.

$scope.ShowSpinner = false;

1

Предполагая, что то, что вы показали как «ответ API», что получение выводимые из console.log в контроллере, кажется, что все, что вам нужно сделать, это установить модель, определяющую область свойства «лошадь» в данном ответ, как это:

$scope.horse = horse.horse; 
 

Так как это довольно странно, вы должны изменить имя параметра от последующего обратного вызова к данным, что было бы гораздо более агностическим и стандартным именем параметра. Если вы сделаете это изменение, которое вы можете установить ваши лошади данные модели области видимости внутри обратного вызова, как это:

$scope.horse = data.horse;

Если я неправильно понял ваш вопрос, дайте мне знать. Надеюсь, это полезно.

+0

спасибо за ответ, жаль, что я должен был быть более ясным, ответ API было то, что я получаю, когда я Гото соответствующий URL с клиентом REST в моем браузере. Теперь я добавил, что я возвращаюсь из Restangular, что, похоже, является кучей других вещей. Я могу видеть данные, зарытые в ответ «Restangularized», но, похоже, он не легко доступен, и я не могу поверить, что его трудно достать, поэтому я должен делать что-то глупое;) – Horse

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

  • Нет связанных вопросов^_^