ngChange se déclenche pendant que la valeur change (ngChange n'est pas similaire à l'événement onChange classique). Comment puis-je lier l'événement onChange classique avec angularjs, qui ne se déclenchera que lorsque le contenu sera validé?
Reliure actuelle:
<input type="text" ng-model="name" ng-change="update()" />
Réponses:
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:
Voici la directive:
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.la source
ng-blur
directive: docs.angularjs.org/api/ng.directive:ngBlurng-model-options="{ updateOn: 'default blur' }"
Voir la documentation$sniffer
pour déterminer si le navigateur prend en charge 'input' et sinon, ils retombent en «keydown». Si vous mettez à jour la directive ci-dessus pour ne dissocier 'input' que si$sniffer.hasEvent('input')
retourne true - vous pouvez éviter cette erreur et continuer à travailler dans IE8Il s'agit des ajouts récents à AngularJS, pour servir de réponse future (également pour une autre question ).
Angular nouvelles versions (maintenant en version 1.3 beta), AngularJS prend en charge nativement cette option, en utilisant
ngModelOptions
, commeDocumentation sur NgModelOptions
Exemple:
la source
Au cas où quelqu'un d'autre chercherait une prise en charge supplémentaire des touches "Entrée", voici une mise à jour du violon fourni par Gloppy
Code pour la liaison de touches:
la source
Pour tous ceux qui luttent avec IE8 (il n'aime pas le détachement ('input'), j'ai trouvé un moyen de contourner cela.
Injectez $ sniffer dans votre directive et utilisez:
IE8 se calme si vous faites cela :)
la source
Selon ma connaissance, nous devrions utiliser ng-change avec l'option de sélection et dans le cas de la zone de texte, nous devrions utiliser ng-blur.
la source
N'est-ce pas utiliser $ scope. $ Watch pour refléter mieux les changements de la variable scope?
la source
la source
J'ai eu exactement le même problème et cela a fonctionné pour moi. Ajoutez
ng-model-update
etng-keyup
et vous êtes prêt à partir! Voici la documentationla source