2015-01-19 2 views
0

태그에 jquery.nicescroll pluggin 및 ng-model이 첨부되어 있습니다. 내 코드에서초점에 손목 시계가 파손되었습니다

<textarea id="paper" ng-model="paper"></textarea> 

나는이 NG 모델 변수에 $watch을 적용합니다.

$scope.$watch("paper", onTextChange); 

모든 것은 내가 textareaб에서 멀리 클릭하면 또한 내가 다른 탭으로 전환 할 때 onTextChange 내가 뭔가를 입력 할 경우에만 해고되지만 제외 좋다.

어떻게하면 이 텍스트가 변경 될 때만 발생합니다. 즉, 무언가를 입력하거나 문자를 삭제할 때만 발생합니까? 지침에

데모 : 여기plunker

+0

변경 사항을 듣기 위해 시계를 사용하고 이벤트는 변경하지 말고 용지가 변경되면 사용자의 기능이 실행됩니다. – cyan

+0

아니, 그 진술에 의해 ** 가변 ** 종이 ** 변수 변경 ($ 범위에서)보고 내 ** onTextChanged() ** 함수를 변경하는 경우 해당 변수가 변경되면 각도 말하고있다. ng-model을 통해 내 텍스트 영역에 바인딩되기 때문에 텍스트 영역에 무언가를 입력 할 때이 이벤트가 발생해야합니다. 해고 당했지만 어떤 것을 입력 할 때뿐만 아니라 아래로 스크롤하고 위로 움직이면 사라집니다. 이상합니다. – kaytrance

답변

2

은 수정의 :

http://plnkr.co/edit/kycmUrthYU38Ukdz0jJG?p=preview

setTimeout( 
function() { 
    $scope.$watch("paper", function(newtext, oldtext) { 
     if (newtext !== oldtext) { 
     onTextChange(); 
     } 
    }); 
    }, 100) 

그래서 문제는 시계가 AngularJS와 소화 할 수있는 응용 프로그램을 지시 할 때마다 함수를 발생합니다. 당신이 한 것은 '변경'기능을 호출 할 때마다 변경 사항을 확인하기 위해 검사기 기능을 통과해야하는 때입니다. '변화를 기다리는 것'이 아니라 '보는 것'에 관한 것입니다. - 함수 인수는 당신이 뭔가를해야 하는지를 알아야합니다.

추가 참고 : - 여기에 좀 더 정보입니다

AngularJS와는 다양한 요소에 대한 모든 종류의 것들에 대한 전문가를 설정합니다. 나는 번짐이 다이제스트를 촉발시키는 ng-touch에 해당한다고 믿는다. What gets added to $scope.$$watchers by default in Angular? And what triggers $digests?

+0

여기에 setTimeout이 사용되는 이유는 무엇입니까? 나는 그것도없이 작동 할 것입니다. – Ved

+0

네가 그럴 필요가 없다. 이유가 있다고 생각해. –

+0

setTimeout을 제거하면 onextext 메서드가로드 이벤트에서 호출되고 theextbox는 처음에는 비어 있고 텍스트 상자에 텍스트가 채워지지 않을 수 있습니다. – Ved

1

setTimeout을 사용하는 것은 나쁜 생각이다. 대신 ng-model-options="{ getterSetter: true }"을 사용하고 값 (Modified get/set Plunk)을 가져 오거나 설정하는 메서드를 작성하고이 메서드 내에서 텍스트 변경 조건을 처리 할 수 ​​있습니다.

+0

나는 당신의 큰 덩어리를 볼 것입니다, 그것은 나에게 새로운 것이 었습니다. 고맙습니다 – kaytrance

관련 문제