2012-08-24 1 views
11

최근에 Angular.js로 게임을 시작했고 데모 프로젝트가 꽤 잘 진행되었습니다. 그러나 백엔드 웹 서비스에서 데이터를로드하려고 시도했을 때 하드 코딩 된 배열과 비교할 때 끊기 시작했습니다. 특히 페이지는 $ .getJSON(). done (...)을 사용하여 $ scope를 설정 한 후에 제대로 데이터 바인딩을하지 못하는 것 같습니다. .getJSON이 끝난 후에 $ scope에 값을 할당하는 대신 다른 곳에서 다르게해야합니까? 나는 높고 낮은 것을 찾았고 백엔드에서 초기 데이터를 가져 오는 각도의 좋은 예를 발견 할 수 없었다.

미리 감사드립니다.

답변

13

범위 외 $scope을 업데이트하려고하면 범위의 $apply 메서드를 사용하여 모델을 변경해야합니다.

아마 같은 :

$.getJSON('ajax/test.json', function(data) { 
     $scope.$apply(function(){ 
      $scope.modelData = data; 
     }); 
    }); 

AngularJS와와 백엔드에 액세스 할 수있는 좋은 방법은 jQuery를 대신 $http 또는 $resource 서비스를 사용하는 것입니다. $scope.$apply을 사용하지 않아도됩니다. $scope.modelData을 바로 업데이트 할 수 있습니다.

This post은 각도 코드 외부의 모델을 업데이트하는 데 좋은 fiddle입니다.

+0

같은 콜백 함수의 끝에서 호출이 완벽하게 감사합니다! 귀하의 예제가 완벽하게 작동하는 동안 나는 그것이 어떻게 작동하는지 이해하는 데 도움이 되었기 때문에 신청의 사용을 지적한 것을 좋아하지만, 아마도 당신이 말한 것처럼 더 선호되는 것 같기 때문에 아마도 http 또는 리소스를 사용해야합니다. 다시 한 번 감사드립니다! – jkat98

0

나 대신 적용과 포장의 단지

$.getJSON('ajax/test.json', function(data) { 
    $scope.data = data;   
    $scope.$apply(); 
});