레일 백엔드와 통신하는 Angular.js 단일 페이지 응용 프로그램 (Ionic Framework)이 있습니다.Angular SPA가 상태 활성화시 API 데이터를 표시하지 않음
$http
서비스를 사용하여 백엔드 API에서 데이터를 가져옵니다.
때때로 나는 백엔드에서 가져온 데이터를 보여주지 않아서 스스로를 시연하는 문제에 직면 해 있습니다. 앱을 시작하면 $http.get
호출이 발행되고 데이터가 반환됩니다 (로그에서 볼 수 있음). 표시되지 않습니다. 그래서 데이터 앱을 호출하면 반환 된 데이터가 표시되어야하는 상태가 활성화되고 (ng-repeat ...를 통해 html 템플릿에 있음) 빈 상태가됩니다.
그런 다음 앱 상태를 변경하고 이전 상태로 돌아 가면 데이터가 표시됩니다. Angular의 $ 리소스 서비스 (예 : http://www.sitepoint.com/creating-crud-app-minutes-angulars-resource/)를 사용하면 데이터를 가져 와서 표시하지만 나중에 문제가 발생하여 $resource
을 사용할 수 없습니다.
실제로 데이터가 API에서 반환되기 전에 템플릿이 표시되어 있기 때문에 템플릿이 비어 있다고 가정합니다. 이 문제를 어떻게 해결할 수 있습니까?
: 내가 생각할 수있는 모든 노력을했습니다, 모든 맛은 $ http.get, 일단 .success() 또는 그 때는(), 약속, 심지어$timeout
의 ... 다음은 실제 응용 프로그램에서 코드 조각은
controllers.js :
.controller('EnemiesCtrl', function($scope, $stateParams, Enemies) {
$scope.enemies = Enemies.all(window.localStorage['id']);
})
services.js :
.factory('Enemies', ['$http', function($http, userId) {
// Use a resource here that returns a JSON array
var enemies = null;
userId = window.localStorage['id'];
$http({
url:"http://localhost:3000/home/api",
method: "GET",
params: {user_id: userId}
}).then(function(resp){
enemies = resp.data;
console.log('Success', resp.data);
},function(err) {
console.error('ERR', err.status);
alert('Error: '+err.status);
// err.status will contain the status code
});
return {
all: function() {
return enemies;
}
}
}]);
template.html :
<ion-item ng-repeat="enemy in enemies" type="item-text-wrap" href="#/tab/place/{{enemy.id}}">
enemy.name</br>
</ion-item>
감사 m1crdy, 그것은, 논리적이고 합리적인 것 같습니다 그러나, 나는 그것을 시도하고 그것은 여전히 처음으로 데이터를 표시하지 않습니다. 또한 적 = resp.data를 추가했습니다. 돌아 오는 적들 바로 전에; 그래서 작동 할 수 있지만 여전히 같은 오류, 내 원수 var는 항상 첫 번째 호출에 대해 null입니다. ( – narog
[코드] var enemies = null; [/ code]을 (를) 삭제하려고 시도 했습니까? – m1crdy
예, 작동하지 않습니다. - "정의되지 않은 적"을 기록합니다. ** 모든 ** 함수 - 동일한 오류로 이동했습니다. 그러나 실행 순서가 예상대로되지는 않습니다. 단지'$ http .get'가 실행되면 프로그램 흐름이 컨트롤러에 반환됩니다. 그래서, 우리는 컨트롤러로부터'Enemies.all()'을 호출하고,'$ http.get '가 실행되면 그 흐름은 내 디버그 메시지를 기록한 컨트롤러로 돌아가고 그 순간에는 적이 null이되고'$ http.get'이 실행되고'.then() '이 기록됩니다. – narog