Прямоугольные данные, попадающие в $scope для списка

Целый день возился с 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"}]}

Изменить 1

Прямоугольный ответ

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

Расширенный прямоугольный вывод console.log

Изменить 2

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

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

Что просто приводит к выводу пустого массива. Я также попытался удалить setResponseInterceptor и изменить структуру API, чтобы получить массив данных напрямую без метаматериала (ошибки и т. д.), без радости :(


person Horse    schedule 08.01.2015    source источник


Ответы (2)


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

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

$scope.ShowSpinner = false;

person James    schedule 08.01.2015

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

$scope.horse = horse.horse;
 

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

$scope.horse = data.horse;

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

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