ngChange está disparando enquanto o valor está mudando (ngChange não são semelhantes ao evento onChange clássico). Como posso vincular o evento onChange clássico com angularjs, que só será acionado quando o conteúdo for confirmado?
Vinculação atual:
<input type="text" ng-model="name" ng-change="update()" />
Respostas:
Esta postagem mostra um exemplo de diretiva que atrasa as alterações do modelo em uma entrada até que o evento de desfoque seja acionado.
Aqui está um violino que mostra o ng-change funcionando com a nova diretiva ng-model-on-blur. Observe que este é um ligeiro ajuste ao violino original .
Se você adicionar a diretiva ao seu código, você alteraria sua ligação para:
Aqui está a diretiva:
Observação: como @wjin menciona nos comentários abaixo, esse recurso é compatível diretamente com o Angular 1.3 (atualmente em beta) via
ngModelOptions
. Veja os documentos para mais informações.fonte
ng-blur
diretriz: docs.angularjs.org/api/ng.directive:ngBlurng-model-options="{ updateOn: 'default blur' }"
Consulte a documentação$sniffer
para determinar se o navegador suporta 'entrada' e, se não, eles voltam para 'keydown'. Se você atualizar a diretiva acima para somente desvincular 'input' se$sniffer.hasEvent('input')
retornar true - então você pode evitar esse erro e ainda trabalhar no IE8Trata-se de adições recentes ao AngularJS, para servir como resposta futura (também para outra pergunta ).
Versões mais recentes do Angular (agora em 1.3 beta), o AngularJS oferece suporte nativo a essa opção, usando
ngModelOptions
, comoNgModelOptions docs
Exemplo:
fonte
Caso alguém esteja procurando suporte adicional para "enter" no teclado, aqui está uma atualização do violino fornecido por Gloppy
Código para vinculação de teclas:
fonte
Para qualquer pessoa que esteja lutando com o IE8 (ele não gosta de desvincular ('input'), encontrei uma maneira de contornar isso.
Injete $ sniffer em sua diretiva e use:
O IE8 se acalma se você fizer isso :)
fonte
De acordo com meu conhecimento, devemos usar ng-change com a opção select e no caso de caixa de texto devemos usar ng-blur.
fonte
Não está usando $ scope. $ Watch para refletir melhor as alterações da variável de escopo?
fonte
fonte
Eu tive exatamente o mesmo problema e isso funcionou para mim. Adicione
ng-model-update
eng-keyup
pronto! Aqui está a documentaçãofonte