Cet article montre un exemple de directive qui retarde les changements de modèle dans une entrée jusqu'à ce que l' événement de flou se déclenche.
Voici un violon qui montre le ng-change fonctionnant avec la nouvelle directive ng-model-on-blur. Notez qu'il s'agit d'une légère modification du violon d'origine .
Si vous ajoutez la directive à votre code, vous modifieriez votre liaison comme suit:
<input type="text" ng-model="name" ng-model-onblur ng-change="update()" />
Voici la directive:
// 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());
});
});
}
};
});
Remarque: comme @wjin le mentionne dans les commentaires ci-dessous, cette fonctionnalité est prise en charge directement dans Angular 1.3 (actuellement en version bêta) via ngModelOptions
. Consultez la documentation pour plus d'informations.