<input type="text" id="exampleab"
ng-model="a.b"
ui-event="{ blur : 'callScriptThenServer()' }" >
Pour certaines raisons, le ng-change
sur la zone de texte ne fonctionne pas, je l'utilise donc; Utiliser le ui-events
de Angular-ui.
Je souhaite appeler la fonction uniquement si la valeur est modifiée et souhaite également conserver l'ancienne valeur dans callback .
Je ne veux pas passer par les directives pures car il y a tellement d'occurrences de celles-ci
NG-CHANGE: sur chaque caractère changé, je reçois un rappel. Je ne veux pas ça. J'ai besoin d'appeler le script de serveur .. avec l'ancienne valeur dans la zone de texte et la nouvelle valeur après le flou
Vous pouvez regarder votre variable pour avoir newValue et oldValue en même temps.
<input type="text" id="exampleab" ng-model="a.b" >
Dans votre contrôleur:
app.controller('ctrl', function ($scope) {
$scope.$watch('a.b', function (newValue, oldValue) {
console.log('oldValue=' + oldValue);
console.log('newValue=' + newValue);
//do something
});
});
EDIT Vous avez mentionné une nouvelle exigence dans votre modification afin que je modifie ma réponse . Vous ne devriez pas utiliser ng-change. vous devez obtenir la valeur oldValue lorsque le contrôle est activé et l'enregistrer dans une variable, puis obtenir la nouvelle valeur lors d'un événement de flou . j'ai créé un nouveau violon.
Dans votre contrôleur:
app.controller('ctrl', function ($scope) {
$scope.showValues = function () {
alert('oldValue = ' + $scope.oldValue);
alert('newValue = ' + $scope.a.b);
}
});
Je votre vue
<input type="text" id="exampleab" ng-model="a.b" ng-init="oldValue = ''" ng-focus="oldValue = a.b" ng-blur="showValues()" />{{a.b}}
Utiliser ng-model-options
<input type="text" ng-model="a.b" ng-change="callScriptThenServer()" ng-model-options="{updateOn: 'blur'}"/>
Vous pouvez utiliser AngularJS Watch
$scope.$watch(function(){
return $scope.a.b;
}, function(newvalue, oldvalue){
//Here You have both newvalue & oldvalue
alert("newvalue: " + newvalue);
alert("oldvalue: " + oldvalue);
},true);
Utilisez Angular ngModelOptions avec getterSetter: true; puis utilisez appel de méthode dans la partie "set" de la fonction.
Voir le dernier exemple sur cette page: https://docs.angularjs.org/api/ng/directive/ngModelOptions