2013-08-29 2 views
0

사람들은 내가 아래 내 응용 프로그램 설치가 있습니다. 그러나 내가 직면 한 문제는 $ scope.tableData가 렌더링되지 않는다는 것입니다. 리소스가 정상적으로 작동합니다. 그것은 데이터를 반환하지만 타이밍 문제라고 생각하지만 해결 방법을 모르겠습니다.각도 자원 타이밍 문제

+0

안녕하세요, 각도의 .query() 함수를 이해하면 색인을 반환합니다. 자신 만의 방법을 써야하는 특별한 이유가 있습니까? –

+0

Angular의 쿼리는 리소스 객체 – runtimeZero

+0

도 반환합니다. html 템플릿도 제공 할 수 있습니까? –

답변

0

확실히 타이밍 문제입니다. MotorDataManager.getFullList()으로 전화를 걸면 undefined이 설정됩니다. 콜백이 설정되지 않기 때문에 따라서 $scope.tableData은 정의되지 않습니다.

변경 사항에 대한 참조는 $scope.tableData이어야합니다. 이 예에서

myApp.factory('MotorDataManager', function(MotorList) { 
    var list = []; 

    MotorList.query().$then(function(value){ 
    angular.forEach(value, function(item) { 
     list.push(item); 
    }); 
    }); 

    return { 
    getFullList: function() { 
     return list; 
    } 
    } 
}); 

myApp.controller('MainCtrl', function($scope,MotorDataManager){ 
    $scope.tableData = MotorDataManager.getFullList(); 
}); 

, 당신은 이제 배열을 반환하는 그래서 하늘의 배열 될 것입니다 $scope.tableData로 시작, 다음은 그것을 할 수있는 한 가지 방법이다. 그러나 이제는 무언가에 대한 참조가 있기 때문에 그것은 괜찮을 것입니다. $resource이 돌아 오면 컨트롤러에 배열이 채워지도록 배열을 채 웁니다 (동일한 참조). Angular의 데이터 바인딩 및 분해 로직이 나머지를 처리해야합니다.

+0

이것은 작동하지 않습니다 .. 다음 오류를 반환합니다 : TypeError : Array.prototype.push는 null 또는 undefined에서 호출했습니다 – runtimeZero

+0

죄송합니다 ... 'angular.forEach' 호출의 편집 내용을 확인하십시오. . 어떤 경우이든이 함수는 값을'list' 배열에 복사하고 덮어 쓰지 않아야합니다. –

+0

타이밍 문제가 해결되지 않습니다.이 코드는 – runtimeZero