2016-09-03 3 views
21

앵귤러 프레임 워크에 익숙하지 않습니다. 여기 내 시나리오에서 자바 스크립트 setTimeout 메서드를 사용하여 일정 시간이 지나면 $ scope.variable을 변경하고 싶습니다.

$scope.variable='Previous'; 

setTimeout(function(){ 
$scope.variable='NEXT'; 
},3000); 

이 코드는 저에게 효과적이지 않습니다. 이 코드를 작동 시키려면 $apply()을 사용했습니다.

나중에 각도 자체에 동일한 작업을하는 $ 타임 아웃 서비스가 있다는 것을 알게되었습니다.

$scope.variable='Previous'; 
     $timeout(function() { 
      $scope.variable='NEXT'; 
    }, 2000); 

어떻게 자바 스크립트 setTimeout$timeout 서비스의 성능을 비교할 수 있습니다 ??

setTimeout 대신 $timeout을 사용해야하는 이유는 무엇입니까 ??

실적을 보여주는 몇 가지 예와 이유를 말씀해주십시오. 외부 (포함 아약스)에서 처리

감사합니다 :)

+1

성능은 현재 앱 내 다이제스트주기의 성능에 완전히 달려 있습니다. $ timeout은 다이제스트를 발생시킵니다. 상당량의 관찰자가있는 앱의 경우'$ rootScope.$ digest()'하면 앱이 정지되고 다시 한 번 고정됩니다. 그것만큼이나 간단합니다. – estus

답변

17

일종의 시간 초과 작업을 수행해야하는 경우가 있으며 JavaScript의 setTimeout() 기능을 사용하여이 작업을 자주 수행하는 경우가 있습니다. 우리는 AngularJS와 응용 프로그램을 사용하는 경우 setTimeout()

그러나, 우리는 또한 scope 어떤 변경 (즉 view에 데이터 바인딩) 다른 반사 될 수 있도록 $scope.$apply()을 사용할 필요가있다.

AngularJS이를위한 편리한 래퍼를 제공 : $timeout() -이되는 우리가 변화 $apply 필요가 없습니다 $apply() 않습니다.

성능에 대해서는입니다.

기본적으로 간격을 만드는 데 $timeout을 사용하는 경우 사용하지 마십시오. 응용 프로그램이 큰 경우 $apply도 실제로 발생하지 않을 수도있는 $digest주기를 트리거합니다. 확실히 성능이 저하됩니다.

14

모든 AngularJS와 범위 변수는이 $ 적용 할 필요가있다().

$ timeout()은 현재 범위를 처리하고 모든 변경 감지가 완료된 후 동일한 다이제스트주기에서 실행됩니다.

시간 매개 변수를 전달하지 않으면 최근에 발견 한 $ timeout()의 장점 중 하나는 DOM 완료를 기다리는 것입니다. 부분이 지침이 도움이

희망에 의해로드 된 후

그래서,

$timeout(function(){ 
    console.log("show after directive partial loaded") 
}); //note, no time parameter 

실행 지시문이 코드 및 제한 시간 콜백 함수 해고 될 것이다.

+2

또한 false를 $ timeout의 두 번째 매개 변수로 전달할 수 있으며 $ apply를 호출하지 않습니다. $ digest를 수동으로 제어하고자 할 때 유용합니다. – Ladmerc

+0

답변 내용이 모호하고 잘못된 정보가 포함되어있을 수 있습니다. 지시문 사용법에 대한 진술은 멀리 가져 왔고 실제로 setTimeout + $ scope와 어떻게 다른지 설명하지 않습니다. $ apply. '$ timeout (() => {...}, ...)'은 기본적으로 setTimeout (() => $ scope. $ apply (..), ...)와 동일하지만, 전자는'$ timeout.flush()'을 사용하여 동 기적으로 테스트 할 수 있습니다 (또한 다이제스트를 건너 뛸 수있는 옵션이 있음). – estus