ngChange se activa mientras el valor cambia (ngChange no es similar al evento clásico onChange). ¿Cómo puedo vincular el evento onChange clásico con angularjs, que solo se activará cuando se confirmen los contenidos?
Enlace actual:
<input type="text" ng-model="name" ng-change="update()" />
Respuestas:
Esta publicación muestra un ejemplo de una directiva que retrasa los cambios de modelo en una entrada hasta que se activa el evento de desenfoque .
Aquí hay un violín que muestra el ng-change trabajando con la nueva directiva ng-model-on-blur. Tenga en cuenta que esto es un ligero ajuste al violín original .
Si agrega la directiva a su código, cambiaría su enlace a esto:
Aquí está la directiva:
Nota: como @wjin menciona en los comentarios a continuación, esta función es compatible directamente en Angular 1.3 (actualmente en beta) a través de
ngModelOptions
. Consulte los documentos para obtener más información.fuente
ng-blur
directiva: docs.angularjs.org/api/ng.directive:ngBlurng-model-options="{ updateOn: 'default blur' }"
Ver documentación$sniffer
para determinar si el navegador admite 'input' y, de no ser así, vuelven a "keydown". Si actualiza la directiva anterior para desvincular solo 'input' si$sniffer.hasEvent('input')
devuelve verdadero, entonces puede evitar ese error y aún trabajar en IE8Se trata de adiciones recientes a AngularJS, para servir como respuesta futura (también para otra pregunta ).
Angular versiones más nuevas (ahora en 1.3 beta), AngularJS admite de forma nativa esta opción, usando
ngModelOptions
, comoDocumentos de NgModelOptions
Ejemplo:
fuente
En caso de que alguien más busque soporte adicional de pulsación de teclas "enter", aquí hay una actualización del violín proporcionada por Gloppy
Código para el enlace de pulsaciones de teclas:
fuente
Para cualquiera que esté luchando con IE8 (no le gusta la desvinculación ('entrada'), encontré una forma de evitarlo.
Inyecte $ sniffer en su directiva y use:
IE8 se calma si haces esto :)
fuente
Según mi conocimiento, deberíamos usar ng-change con la opción de selección y en el caso del cuadro de texto deberíamos usar ng-blur.
fuente
¿No está usando $ scope. $ Watch para reflejar mejor los cambios de la variable de alcance?
fuente
fuente
Tuve exactamente el mismo problema y esto funcionó para mí. ¡Agrega
ng-model-update
yng-keyup
listo! Aquí están los documentosfuente