2016-06-25 5 views
0

Я пытаюсь создать приложение с Angular JS, которое извлекает данные из API Django REST.
Не получать данные с помощью Angular JS

У меня есть этот скрипт

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

userListApp.factory('Classroom', function($resource) { 
     return $resource('/classrooms/:id/', 
     {'query': {method: 'GET', isArray:false}} 
    ); 
    }); 

userListApp.controller('UsersController', function($scope, Classroom) { 
    Classroom.query(function(data) { 
    $scope.classrooms = data; 
    }); 
}); 

и это HTML

<div ng-app="userListApp"> 
    <div ng-controller="UsersController"> 
     <table class="table table-striped"> 
      <thead> 
       <tr> 
        <th>Classroom</th> 
        <th>School</th> 
        <th>Academic year</th> 
       </tr> 
      </thead> 
      <tbody> 
       <tr ng-repeat="classroom in classrooms"> 
        <td>{{classroom.classroom}}</td> 
        <td>{{classroom.school}}</td> 
        <td>{{classroom.academic_year}}</td> 
       </tr> 
      </tbody> 
     </table> 
    </div> 
</div> 

Но я получаю эту ошибку в консоли

Error: $resource:badcfg
Response does not match configured parameter
Error in resource configuration for action query . Expected response to contain an array but got an object (Request: GET /classrooms)

(from the error reference page of Angular JS)

Я смотрел на некоторые ответы здесь на StackOverflow, и пришел к this one, и я попытался сделать то, что они говорят

userListApp.factory('Classroom', function($resource) { 
     return $resource('/classrooms/:id/', 
     {method: 'classrooms', id: '*'}, 
     {'query': {method: 'GET', isArray:false}} 
    ); 
    }); 

И я не получаю ошибок нет, но нет данных либо. Есть, однако, некоторые таблицы на веб-странице, например, если он пытается «поймать» что-то, вот скриншот

enter image description here


UPDATE:

Я пытался поставить этот линия

return $resource('/classrooms/?format=json', 

Вместо этого

return $resource('/classrooms/:id/', 

на угловом приложении, и нет никаких данных, но, если я иду к инструментам разработчика по сети -> XHR, я получаю данные JSON

[{"school":{"id":1,"school_name":"IPSIA F. Lampertico","address":"Viale Giangiorgio Trissino, 30","city":"Vicenza"},"academic_year":"2015/2016","classroom":"1^A","floor":0,"students":[{"classroom":1,"first_name":"Stefano","last_name":"Rossi","gender":"M","birthday":"1998-06-22"},{"classroom":1,"first_name":"Luca","last_name":"Possanzini","gender":"M","birthday":"1999-11-22"}] 

, но, как я сказал, что данные не показано в таблицах в html.


UPDATE 2: "Формат = JSON"

После добавления к URL ресурса, я получаю точное количество строк (в моих данных у меня есть три классных комнаты, так что я получаю три строки в таблице HTML), но в нем нет данных.


UPDATE 3:

Я добавил эту строку для отладки кода

userListApp.controller('UsersController', function($scope, Classroom) { 
    Classroom.query(function(data) { 
    $scope.classrooms = data; 
    console.log(data); <--- NEW LINE FOR THE DEBUG 
    }); 
}); 

и теперь я получаю это, на бревне консоли

enter image description here

+0

Ну, скриншот показывает, что у вас есть данные, так как ваша таблица имеет много строк. Они пустые, что означает, что у вас нет объектов (или имеют пустые) поля с именем classroom, school и academyyyear. Откройте свои инструменты для разработчиков браузера и посмотрите, что вы действительно получаете. –

ответ

0

Ваш data не находится в c orrect. В итоге у вас не было данных }]. Повторно проверьте ответ сервера.

Я воспроизвел весь сценарий на своей машине, и ваш код работал отлично.

HTML: То же, что и у вас.

Сценарий:

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

userListApp.factory('Classroom', function($resource) { 
     return $resource('http://localhost:9000/classrooms/1', //changed this line only. 
     {'query': {method: 'GET', isArray:false}} 
    ); 
    }); 

userListApp.controller('UsersController', function($scope, Classroom) { 
    Classroom.query(function(data) { 
    $scope.classrooms = data; 
    }); 
}); 

http://localhost:9000/classrooms/1 возвращает только те данные, которые вы указали при }] добавленных в конце.

ВЫВОД:

enter image description here

+0

Да, вы правы, я скопировал его, и я забыл поставить окончательный «}]», потому что на самом деле у меня есть три «классных комнаты», но я скопировал только первый. Во всяком случае, код Json правильный (я проверял его на https://jsonformatter.curiousconcept.com/), но я не могу визуализировать данные в любом случае. Странно то, что я вижу точное количество строк (три), но в нем нет данных. –

+0

Вы уверены, что '$ scope.classrooms' содержит данные? Вы отлаживали этот момент? Проверьте свой css. Может быть, ваш текст того же цвета, что и ваш фон? И проверьте, есть ли у источника текст. – prashkr

+0

Является ли ваш исходный файл похожим на это? [источник] (http://i.imgur.com/kLvEOFC.png) – prashkr

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