2014-12-12 2 views
3

$watch을 사용하려고하지만 기대했던대로 작동하지 않습니다.

$scope.string이 변경되면 아래 코드가 실행되지 않는 이유는 무엇입니까?

$scope.string = 'Hello.'; 
$scope.timesChanged = 0; 

$scope.$watch('string', function (newValue) { 
    $scope.timesChanged =+ 1; 
}); 

$scope.string = 'How are you'; 
$scope.string = 'doing today?'; 

는 여기 fiddle

+0

의 사용 가능한 복제 [AngularJS와 : 작동하지 않는 기본 $ 시계 (https://stackoverflow.com/questions/ 15664933/angularjs-basic-watch-not-working) – Pureferret

답변

3

방법이 없기 때문에 화재가 발생하지 않습니다. 각도는 선언 한 직후 문자열을 변경했다는 것을 알 수 있습니다. 이 경우 새 다이제스트 루프를 트리거하는 것은 없으므로 $watch은 실행되지 않습니다. 만약

$scope.string = 'Hello.'; 
$scope.string = 'How are you'; 
$scope.string = 'doing today?'; 

$scope.timesChanged = 0; 

$scope.$watch('string', function (newValue) { 
    $scope.timesChanged =+ 1; // you probably want += 1 here. 
}); 

와쳐 string 변수 초기화와 같은 다이제스트 루프 실행에 등록 쓰는 것처럼 기본적이 동일하다.

+0

글쎄,'= +'도'+ ='가 아니기 때문에 그의 테스트조차 정확하지 않습니다. – Sulthan

+0

@ 설탕 예, 감사합니다. – dfsq

2

내가 문제가 범위의 변경이 시계 만들기보다 업데이트 범위의 같은 라운드에서 발생하기 때문에 시계가 트리거되지 않습니다 생각합니다. 각도를 확인하기 전에 모든 것이 적용될 수 있도록 컨트롤러를 초기화하고 있습니다. 시계가 작동하지 않습니다.

2

$ 시계가 괜찮 으면 잘못된 결과를 기대할 수 있습니다.

$ watch 함수는 컨트롤러가 처음 컴파일 된 후에 만 ​​감시되고 작동 한 후에 보게 설정됩니다.

내가 그렇게 당신의 바이올린을 업데이트

당신은 행동에 그것을 볼 수 있습니다

http://jsfiddle.net/S9rV2/27/

var app = angular.module('myApp', []); 

function MyCtrl($scope) { 

    $scope.string = 'Hello.'; 
    $scope.timesChanged = 0; 

    $scope.$watch('string', function (newValue) { 
     $scope.timesChanged++; 
    }); 

    $scope.string = 'How are you'; 
    $scope.string = 'doing today?'; 

} 
<div ng-controller="MyCtrl">{{ timesChanged }} 
    <br/> 
    <input type="text" ng-model="string"></input> 
</div> 
관련 문제