2013-09-05 2 views
3

간단한 카운터 (초당 업데이트)를 표시하고 싶은 입력 필드가 있습니다.AngularJS에서 간단한 타이머 만들기

<input class="form-control input-lg" type="text" placeholder="00" ng-model="ss"> 

시작/컨트롤러

보기 ng-click 방법을 연결 한 각 버튼

<button ng-click="start()">Start</button> 

나는 컨트롤러 기능 내에서 카운터를 수행 할 수 있습니다 중지?

$scope.start = function() { 

}; 

나는이

$scope.start = function() { 
    if($scope.counting === true) return false; 
    $scope.counting = true; 
    $scope.counter = setInterval($scope.updateCount, 1000); 
}; 

$scope.updateCount = function() { 
    $scope.ss++; 
} 

그러나 시작 함수가 호출 될 때, 값이 입력 ng-model='ss' 지속적를 업데이트하지 않는 뭔가를 시도했다. 그냥 1로 설정하면 간격이 계속 업데이트되지 않는 것 같습니다.

아니면 서비스를 만들어야합니까? 그렇다면 누군가가 업데이트 카운트 값을 다시 컨트롤러에 반환하기 위해 해당 서비스를 설정하는 방법에 대한 올바른 방향을 알려줄 수 있습니까?

평소와 같이 도움을 주시면 감사하겠습니다.

답변

1

setInterval 콜백 내에 $scope.$apply()을 사용해야 값이 업데이트됩니다.

$scope.updateCount = function() { 
    $scope.ss++; 
    $scope.$apply(); 
} 

(이 $apply의 필요성을 방지하기 때문에) 오히려 setInterval보다 $timeout는 일반적으로 권장 사용, 여기에 그것을 할 수있는 좋은 방법입니다 https://stackoverflow.com/a/14238039/1266600.

+0

고맙습니다. - $ apply는 내가 필요한 것입니다. 이 함수는 원래 $ timeout을 사용했지만 setInterval이 $ timeout과 관련되었을 것이라고 생각했습니다. 명확히하고 링크를 제공해 주셔서 감사합니다. 귀하의 의견으로는 이것이 서비스를 보장한다고 생각합니까? – Jbird

+0

여러 컨트롤러에서 재사용 가능한 구성 요소로 사용하지 않는 한 서비스를 생성하는 것은 아마도 과잉 일 것입니다 :) – sushain97

+2

'$ timeout'을 사용하지 않는 좋은 이유가 없다면'$ timeout '대신. –