2014-10-20 3 views
1

Итак, для приложения AngularJS, которое я создаю, мы ранее использовали локальные файлы JSON для импорта данных в приложение с использованием маршрутизации.Удаленные данные AngularJS с параметрами URL

storiesControllers.controller('StoryDetailCtrl', ['$scope', '$sce', '$http', '$location', '$routeParams', function($scope, $sce, $http, $location, $routeParams) { 
    $scope.storyID = $routeParams.storyID; 
    $http.get('/story/'+$routeParams.storyID+'.json') 
    .success(function(data) { 
     $scope.story = data; 
    }); 
}]); 

Однако мы собираемся получать данные непосредственно с сервера. Только одна строка изменяется следующим образом:

storiesControllers.controller('StoryDetailCtrl', ['$scope', '$sce', '$http', '$location', '$routeParams', function($scope, $sce, $http, $location, $routeParams) { 
    $scope.storyID = $routeParams.storyID; 
    $http.get('http://website.co.uk/?id='+$routeParams.storyID) 
    .success(function(data) { 
     $scope.story = data; 
    }); 
}]); 

Этот метод работает на самом высоком уровне для фильтрации истории по категориям:

$http.get('http://mywebsite.co.uk/?category=CategoryName') 

Но на индивидуальной истории это совершенно пустой, и никакие данные не загружены.

URL и параметр верны и работают нормально, данные на сервере в порядке и соответствуют именно локальным файлам, так почему это не работает?

Я пропустил что-то действительно очевидное?

+0

Проблемы с перекрестным происхождением? – Shomz

+0

Нет, мы допустили CORS и т. Д. Как я уже сказал, на верхнем уровне он работает. Список всех историй с использованием ng-repeat в порядке, но когда я перехожу к конкретному идентификатору с помощью маршрутизации, он просто пуст. Я знаю, что вызов URL с параметрами работает, но он просто ничего не показывает ... – Mike

+0

Вы видите, что вызов был сделан в «http://website.co.uk/?id=whatever» в ваши сетевые инструменты? Когда вы говорите, что ничего не показывает, происходит ли вызов, есть ли данные, возвращающиеся назад, можете ли вы увидеть что-нибудь в объекте данных, который вы используете для $ scope.story? –

ответ

2

Хорошо, ответ был фактически найден моим коллегой. Получается, что вместо того, чтобы:

$scope.story = data; 

мне нужно использовать:

$scope.story = data[0]; 

Я не уверен в уместности квадратных скобках 0, но это, кажется, установил ее!

+0

Очевидно, объект возвратил массив, или объект данных имеет фактические данные по первому свойству. Вы должны действительно выйти из объекта данных, посмотреть на его структуру. [0] просто указывает, что вы извлекаете первый элемент в массиве (или первое свойство объекта) –

+0

Я уверен, что это очевидно для вас, Ингве, но я только начинающий для Углового. Спасибо за объяснение. – Mike

+0

Если у вас возникли проблемы, вы хотите изучить свои данные. Используйте сетевые инструменты в браузере, чтобы увидеть ответ от API (который мог бы указать вам на результат массива), а затем, когда все остальное не работает, console.log (data); Это меньше проблема углов и проблема REST/AJAX. –