$scope
속성을 변경하면 무언가를하고 싶다고합시다. 이 속성은 input
필드에 바인딩되어 있습니다. $watch
을 사용하는 경우와 ngChange
을 사용하는 경우의 장점/단점은 무엇입니까?
HTML
<input ng-model="foo" ng-change="increment()">
<p>foo: {{foo}}</p>
<!-- I want to do something when foo changes.
In this case keep track of the number of changes. -->
<p>fooChangeCount: {{fooChangeCount}}</p>
JS
// Option 1: $watch
$scope.$watch('foo', function() {
$scope.fooChangeCount++;
});
// Option 2: ngChange
$scope.fooChangeCount = 0;
$scope.increment = function() {
$scope.fooChangeCount++;
};
http://plnkr.co/edit/4xJWpU6AN9HIp0OSZjgm?p=preview
당신이 $watch
(값이 당신이 찾는 경우를 사용해야 할 때이 시간이 있다는 것을 이해 시계가 입력 필드에 바인딩되지 않음). 그리고 나는 여러분이 ngChange
을 사용해야 할 때가 있다는 것을 이해합니다. (입력 값의 변화에 응답하기 위해 무언가를하고 싶을 때, 그러나 스코프 속성 변경에 응답 할 필요는 없습니다).
그러나이 경우 모두 동일한 작업을 수행합니다.
내 생각 :
ngChange
청소기, 그리고 무슨 일이 일어나고 있는지 이해하기 쉽게 보인다.$watch
다소 빨라지지만 무시할 수있을 것 같습니다.ngChange
을 사용하면 Angular가 이벤트 리스너를 설정하기 위해 컴파일 단계에서 추가 작업을해야 할 것이라고 생각합니다. 아마도 추가 이벤트 리스너가 속도를 조금 줄입니다.ngChange
을 사용하는지 여부에 관계없이 다이제스트주기가 변경 사항에 따라 실행되므로 변경 사항에 응답하여 무언가를 청취하고 함수를 호출 할 수 있습니다.