92 votes

AngularJS : ngChange d’entrée [texte] se déclenche alors que la valeur change

ngChange déclenche alors que la valeur change (les ngChange ne sont pas similaires à l’événement onChange classique). Comment puis-je lier l’événement onChange classique avec angularjs, qui ne se déclenche que lorsque le contenu est engagée ?

Liaison en cours :

96voto

Gloopy Points 16421

Ce post montre un exemple d'une directive que les retards les changements de modèle à une entrée jusqu'à ce que le flou de l' événement se déclenche.

Ici est un violon qui montre la ng-changement de travailler avec le nouveau ng-model-sur-le flou de la directive. Remarque c'est une légère ajuster à l' origine de violon.

Si vous ajoutez la directive de votre code, vous pouvez modifier votre liaison à ceci:

<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 mentionne dans les commentaires ci-dessous cette fonctionnalité est prise en charge directement dans Angulaire 1.3 (actuellement en bêta) par ngModelOptions. Voir la doc pour plus d'info.

32voto

manikanta Points 2184

Il s’agit des ajouts récents à AngularJS, pour servir de réponse future (aussi pour une autre question).

Angulaires versions plus récentes (maintenant en version bêta 1.3), AngularJS en mode natif prend en charge cette option, à l’aide de `` , comme

Docs NgModelOptions

Exemple :

8voto

Bing Han Points 151

Dans le cas où ceux qui cherchent d’autre supplémentaires « entrez » soutien keypress, voici une mise à jour pour le fiddle fournies par Gloppy

Code pour la liaison de keypress :

5voto

Brad Barrow Points 646

Pour tous ceux qui luttent avec IE8 (il n’aime pas le unbind('input'), j’ai trouvé un moyen autour de lui.

Injecter $sniffer dans votre directive et utilisation :

IE8 se calme si vous faites cela  :)

3voto

Zahiduzzaman Points 79

N’utilise pas $scope. $watch pour refléter les changements de variable de portée mieux ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X