Angularjs: input [ text ]ngChange는 값이 변경되는 동안 실행됩니다.
ngChange는 값이 변경되는 동안 실행됩니다(ngChange는 기존의 onChange 이벤트와 유사하지 않습니다).콘텐츠가 커밋될 때만 발생하는 기존 onChange 이벤트를 angularjs로 바인딩하려면 어떻게 해야 합니까?
현재 바인딩:
<input type="text" ng-model="name" ng-change="update()" />
이 게시물에서는 블러 이벤트가 발생할 때까지 입력에 대한 모델 변경을 지연시키는 지시어의 예를 보여 줍니다.
새로운 ng-model-on-blur 디렉티브로 동작하는ng-change를 나타내는 바이올린을 다음에 나타냅니다.이것은 원래의 바이올린을 약간 수정한 것에 주의해 주세요.
코드에 디렉티브를 추가하면 바인딩이 다음과 같이 변경됩니다.
<input type="text" ng-model="name" ng-model-onblur ng-change="update()" />
지시사항은 다음과 같습니다.
// override the default input to update on blur
angular.module('app', []).directive('ngModelOnblur', function() {
return {
restrict: 'A',
require: 'ngModel',
priority: 1, // needed for angular 1.2.x
link: function(scope, elm, attr, ngModelCtrl) {
if (attr.type === 'radio' || attr.type === 'checkbox') return;
elm.unbind('input').unbind('keydown').unbind('change');
elm.bind('blur', function() {
scope.$apply(function() {
ngModelCtrl.$setViewValue(elm.val());
});
});
}
};
});
주의: @wjin이 아래 코멘트에서 언급했듯이 이 기능은 Angular 1.3(현재 베타 버전)에서 직접 지원됩니다.ngModelOptions
자세한 것은, 문서를 참조해 주세요.
이것은 향후의 답변으로 사용할 수 있도록 최근 AngularJs에 추가된 내용에 대한 것입니다(또 다른 질문도 마찬가지).
Angular 새 버전(현재 1.3 베타 버전), AngularJS는 기본적으로 이 옵션을 지원합니다.ngModelOptions
,맘에 들다
ng-model-options="{ updateOn: 'default blur', debounce: { default: 500, blur: 0 } }"
예:
<input type="text" name="username"
ng-model="user.name"
ng-model-options="{updateOn: 'default blur', debounce: {default: 500, blur: 0} }" />
기타 "입력" 키 누르기 지원을 원하는 사용자가 있을 경우 Gloppy에서 제공하는 바이올린에 대한 업데이트를 알려드립니다.
키 누르기 바인딩 코드:
elm.bind("keydown keypress", function(event) {
if (event.which === 13) {
scope.$apply(function() {
ngModelCtrl.$setViewValue(elm.val());
});
}
});
IE8('input'은 언바인드'를 좋아하지 않음)에 어려움을 겪고 있는 사람들을 위해, 저는 이 문제를 해결할 방법을 찾았습니다.
지시문에 $sniffer를 삽입하고 다음을 사용합니다.
if($sniffer.hasEvent('input')){
elm.unbind('input');
}
이렇게 하면 IE8이 진정됩니다. : )
제가 아는 바로는 select 옵션과 함께 ng-change를 사용하고 텍스트 박스의 경우 ng-blur를 사용해야 합니다.
$scope를 사용하지 않습니다.$watch는 범위 변수의 변화를 더 잘 반영합니까?
기본 입력 onChange 동작을 덮어씁니다(제어 손실 포커스와 값이 변경된 경우에만 함수를 호출합니다).
메모: ngChange는 기존의 onChange 이벤트와 유사하지 않습니다.값이 변경되는 동안 이벤트를 기동합니다.이 지시어는 포커스를 받으면 요소의 값을 저장합니다.
블러시에 새로운 값이 변경되었는지 여부를 체크하고 변경되었을 경우 이벤트를 기동합니다.@param {String} - "onChange"가 실행될 때 호출되는 함수 이름
@put < input my - on - change = " my Func " ng - model = " model " >
angular.module('app', []).directive('myOnChange', function () {
return {
restrict: 'A',
require: 'ngModel',
scope: {
myOnChange: '='
},
link: function (scope, elm, attr) {
if (attr.type === 'radio' || attr.type === 'checkbox') {
return;
}
// store value when get focus
elm.bind('focus', function () {
scope.value = elm.val();
});
// execute the event when loose focus and value was change
elm.bind('blur', function () {
var currentValue = elm.val();
if (scope.value !== currentValue) {
if (scope.myOnChange) {
scope.myOnChange();
}
}
});
}
};
});
나도 똑같은 문제가 있었는데 이게 나한테 효과가 있었어.ng-model-update
★★★★★★★★★★★★★★★★★」ng-keyup
이제 가도 돼!여기 그 문서들이 있습니다.
<input type="text" name="userName"
ng-model="user.name"
ng-change="update()"
ng-model-options="{ updateOn: 'blur' }"
ng-keyup="cancel($event)" />
언급URL : https://stackoverflow.com/questions/11868393/angularjs-inputtext-ngchange-fires-while-the-value-is-changing
'programing' 카테고리의 다른 글
Angular에 정의된 메서드를 호출하는 방법JS 디렉티브? (0) | 2023.03.22 |
---|---|
스프링 부트에서의 Dispatcher Servlet 및 web.xml (0) | 2023.03.22 |
WordPress 데이터베이스의 어디에 게시된 이미지 링크가 저장됩니까? (0) | 2023.03.22 |
@ConfigurationProperties 스프링 부팅 구성 주석 프로세서를 클래스 경로에서 찾을 수 없습니다. (0) | 2023.03.22 |
PHP: strlen이 바이트 길이 대신 문자 길이를 반환합니다. (0) | 2023.03.22 |