2013-10-20 6 views
0

AngularJS에 작은 문제가 있습니다. 다음을 참조하십시오.Angularjs - Digest Loop/Repaint timing

$http({method: 'GET', url: 'some/url/withJSON.json'}) 
     .success(function(data) 
       { 
       $scope.data = data 
       $animations._load('arg1') 
       }) 

$ animations는 일부 작업을 수행하는 등록 된 서비스입니다. Window가 그려지기 전에/digest loop가 완료되기 전에 _load() 메소드가 실행될 때가끔 (아마도 20 %) 시각화가 완료되지 않았 음을 의미합니다. _load()를 10ms의 setTimeout()으로 래핑하면이 문제가 해결되었지만, 다이제스트 루프가 완료되면 콜백을 실행하는 암시 적/명시 적 방법이 AngularJS에 있습니까?

답변

4

더 많은 정보가 없으면 $timeout(fn)이 최선의 방법 일 것이라고 제안합니다. 기본적으로 브라우저가 렌더링하기 위해 각도 완료 처리가 끝난 후 휴식이 있는지 확인합니다. 대략 setTimeout(fn, 0)과 같으므로 이미 제안한 내용이 있지만 테스트하기에 적합합니다.

일반적으로 현재 다이제스트주기 이후에 렌더링되지만 DOM 렌더링 전에는 $scope.$evalAsync(fn)이 렌더링됩니다. 나는 그것에 대해 추론하기가 더 쉬워지고 그 동안 다른 비 - 각성 사건이 일어나지 않도록하기 때문에 $evalAsync을 선호하는 경향이 있지만, 그것은 당신에게 어떤 영향을 미칩니 까.

answer에는 두 가지 방법에 대한 자세한 정보가 있습니다.

+0

감사합니다. 이것은 설명해야 할 상당히 일반적인 범프입니다. 제공된 링크 및 대체 제안으로 인해 올바른 것으로 표시하십시오. –

관련 문제