Как из полученного словаря(json) получить данные?

Пытаю связать angularjs и django rest framework. Но не знаю как взять данные, если получаю их через сервис. Но данные приходят, в консоли видны.
Вот мой код для ангуляра:
var app = angular.module('example.app.basic', ['videoServices',]);

app.controller('AppController', ['$scope', 'Results',
    function($scope, Results) {
        $scope.page = 1;
        $scope.results = Results.query();
        $scope.videos = $scope.results['results']; //$scope.results.item пробовал

    }
  ]);


var videoServices = angular.module('videoServices', ['ngResource']);

videoServices.factory('Results', ['$resource',
  function($resource){
    return $resource('/api/videos/:videoId?format=json&page=:page', {}, {
      query: {method:'GET', params:{videoId:'', page:'1'}}
    });
  }]);


А в json у меня вот такое:
{
    "count": 21975,
    "next": "http://127.0.0.1:8000/api/videos/?format=json&page=2",
    "previous": null,
    "results": [
        {
            "id": 22416,
            "video_id": "9RAvpnWvynk",
            "title": "sdsdsd",
            "description": ""
        },
        {
            "id": 22415,
            "video_id": "ohgUhgf-dk",
            "title": "sdsdsd",
            "description": ""
        }
    ]
}

Наверное, отправите JS учить? Будете правы. Но я не хочу знать(пока не хочу).
А вот так работает:
(function() {
  var app;

  app = angular.module('example.app.basic', ['videoServices']);

  app.controller('AppController', [
    '$scope', '$http', function($scope, $http) {
      $scope.videos = [];
      $scope.page = 1;
      $scope.next = function() {
          return $http.get('/api/videos/?format=json&page=' + $scope.page).then(function (result) {
              $scope.page += 1;
              return angular.forEach(result.data['results'], function (item) {
                  return $scope.videos.push(item);
                      });
                  });
              };

      return $scope.next();
    }
  ]);

}).call(this);


Если вдруг вы пришли с поисковика, и не знаете как вообще хоть как-то выводить, то просто внутри шаблона обращайтесь через точку к данным. В моем случае ng-repeat="video in videos.results"
  • Вопрос задан
  • 2537 просмотров
Решения вопроса 1
benbor
@benbor
Помог ответ - не забудь лайкнуть
Да там не так уж и много учить, json очень прост.
$scope.results['results'] // здесь лежит не один элемент, а весь массив
$scope.results['results'][0] // здесь лежит первый по порядку элемент
$scope.results['results'][1] // здесь лежит второй по порядку элемент

если нужно найти элемент по id то придется идти по всему массиву и искать с нужным id

UPD: jsfiddle.net/m27ow8rz/22
$resource очень гемороен, хотите для него разбирайтесь сами, query точно подразумевает, что вам вернется масив, а не объект. Плюс, $resource это promise его нужно юзать через сallback, к тому моменту когда вы пытаетесь
$scope.videos = $scope.results['results']; //$scope.results.item пробовал
запрос еще не выполнен. Я сделал с $http (для симуляции запроса использовал doc.jsfiddle.net/use/echo.html) Переделайте под свой сами
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы