2016-07-01 6 views
1

나는 JSON 파일을 얻고 그 내용을 $ $ scope에 첨부하려고합니다.AngularJS가 데이터를 반환하지 않습니다.

첫 번째 console.log은 필요한 결과를 반환하지만 두 번째는 undefined을 반환합니다.

데이터를 저장하기 위해 이것을 쓰는 올바른 방법은 무엇입니까?

'use strict'; 

var myApp = angular.module('myApp.view1', ['ngRoute']); 

myApp.config(['$routeProvider', function($routeProvider) { 
    $routeProvider.when('/view1', { 
    templateUrl: 'view1/view1.html', 
    controller: 'View1Ctrl' 
    }); 
}]); 


myApp.controller('View1Ctrl', [ 

    '$scope', 
    '$http', 

    function($scope, $http) { 
    $http.get('view1/info.json') 
    .then(function(res){ 
     $scope.data = res.data.info 
     console.log($scope.data) 
    }); 

    console.log($scope.data) 
}]); 
+1

는'실행되기 때문에이'$ http'은 다음과 같습니다

좋은 출발점이 될 것입니다 비동기식이며 완료하는 데 시간이 걸립니다. 정확히 무엇을하고 싶습니까? – charlietfl

+0

json 파일을 가져 와서 $ scope에 정보를 저장하면 뷰에 내용을 넣을 수 있습니다. – IAmAkittycatAMA

+0

코드가 설정된 방식으로보기에서 사용할 수 있습니다. 보기에서 작동하지 않는 경우 문제가보기 코드에 있거나 데이터 구조를 제대로 이해하지 못함 – charlietfl

답변

0

이유는 약속이라고하는 것 때문입니다. 나는 그들을 조사하는 것을 확실히 suggets. 여기에 순서대로 일어나는 일이 있습니다 :

그건 JSON 데이터를 얻고 싶습니다. 그러나 아직 실제로 그것을 얻지는 못합니다. 그런 다음 콘솔 로그를 작성합니다.

console.log($scope.data) 

글쎄 $ scope.data는 정의되지 않았습니다. 아무것도 아직 설정하지 않았습니다! 그런 다음 javascript는 실제로 JSON 데이터를 가져옵니다. 데이터를 가져 오면 then 내의 함수가 호출됩니다. 이 후,

$scope.data = res.data.info 
console.log($scope.data) 

$scope.data는 이유 console.log 작품 인 정의된다. 자세한 정보에 대한 약속에 대해 자세히 읽어보십시오! 데이터는 ....하지만() 마지막`을 console.log 때까지 (컨트롤러 범위에) 저장되는 https://www.youtube.com/watch?v=wA0gZnBI8i4

+0

감사합니다. 지금은 훨씬 나아졌습니다. 링크 주셔서 감사합니다. – IAmAkittycatAMA

1

AngularJS와의 $http.get()then() 콜백은 비동기 적으로 호출된다.

즉, 콜백에서 작동하지만 두 번째 호출에서는 작동하지 않습니다.

0

음, 데이터가 저장됩니다. 하지만 두 번째 console.log()가 실행될 때가 아닙니다. 두 번째 console.log()는 다음에 "then"약속/콜백이 으로 실행됩니다. 템플릿에 $ scope.data가 필요한 경우이 방법이 효과적입니다. Angulars 다이제스트주기는 $ https의 콜백 이후에 실행됩니다.

관련 문제