0

에서 $ 범위 변수에 액세스 할 수 없습니다 어떤 작품) :내가 같은 JSON 객체를 반환하는 공장을 호출 내 컨트롤러에서 컨트롤러

하지만 컨트롤러 에서이 동일한 변수에 액세스 할 수 있지만 작동하지 않습니다 - 각도 그냥 휴식.

나는이 컨트롤러의 시작하려고 :

init(); 
function init() { 
    getData(); 

    console.log($scope.dataList[0].UnitNumber); 

    $scope.firstDataListItem = $scope.dataList[0].UnitNumber; 
} 

GetData의() $ scope.dataList 사용할 수없는 이유는 내가 볼 수 없습니다

라고?

+0

당신이 전체 컨트롤러를 게시 할 수 :

당신은 약속의 사용을 만들 필요가? $ scope 요소를 포함하고 컨트롤러의 내부 범위에서 getData() 메서드에 도달하면 문제가 발생할 수 있습니다. – downhand

답변

3

getData()의 데이터 검색은 비동기식으로을 실행합니다. getData() 실행이 완료되면 사용할 수 없습니다.

function getData() { 
    return trainDataFactory.getData() 
    .then(function (response) { 
     return response.data; 
    }) 
    .catch(function (error) { 
     throw new Error('Unable to load data: ' + error.message); 
    }); 
} 

function init() {  
    getData().then(function (data) { 
     $scope.dataList = data; 
     console.log(data[0].UnitNumber); 
     $scope.firstDataListItem = data[0].UnitNumber; 
    }) 
    .catch(function (error) { 
     $scope.status = error.message; 
    }); 
} 
+0

고맙습니다. 따라서 비동기 적으로 작업 할 때 then 문은 데이터를 검색 한 후 데이터에 직접 액세스하는 것이 중요합니다. – JakkyD

+0

또한 dataList를 사용하려면 getData(). then (function (data) {} 또는 init() 함수 외부에서 액세스해야 함) – JakkyD

+0

@JakkyD 예, 약속 및'then()'메소드 비동기 작업에 매우 중요합니다. 시간이있을 때 [이 책] (https://github.com/getify/You-Dont-Know-JS/tree/master/async%20%26%20performance)을 읽는 것이 좋습니다. . 두 번째 질문을 완전히 이해하지는 못하지만, 일반적으로, 당신은'then()'핸들러 내에서 비동기 작업을 수행해야합니다. – JLRishe

관련 문제