2014-01-03 2 views
12
<input type="text" id="exampleab" 
ng-model="a.b" 
ui-event="{ blur : 'callScriptThenServer()' }" > 
По некоторым причинам ng-change на текстовом поле не работает, поэтому я его использую; Использование Angular-ui's ui-events.

Угловое ng-изменение входного текстового поля со старым значением

ПРОБЛЕМА

Я хочу, чтобы вызвать функцию, только если значение изменяется и также хочет старое значение в функции обратного вызова. (Так как я хочу, чтобы отправить OldValue на сервер).

Я не хочу идти через чисто директиву маршрут, потому что есть так много вхождений этих

NG-CHANGE: на каждый персонаже изменился ли я получить обратный вызов. Я не хочу этого. Мне нужно вызвать скрипт сервера .. со старым значением в текстовом поле и новое значение после размытия

+0

нг-изменение работает просто отлично. Проверьте этот [пример] http://plnkr.co/edit/UVG8rPhBa5vrwn6UR7hr?p=preview –

+0

, вам нужно будет ввести что-то в поле, чтобы использовать этот пример. при изменении он будет предупреждать –

+0

о привязке каждого символа, я получаю обратный вызов. Я НЕ ХОЧУ, ЧТО .. Мне нужно вызвать скрипт сервера ..со старым значением в текстовом поле и новым значением после размытия – andNn

ответ

2

Вы можете использовать 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); 

Plunkr DEMO

+1

при привязке каждого символа i получить обратный вызов .. Я НЕ ХОЧУ, ЧТО .. Мне нужно вызвать скрипт сервера .. со старым значением в текстовом поле и новым значением после размытия – andNn

14

Вы можете наблюдать переменную иметь newValue и oldValue одновременно.

<input type="text" id="exampleab" ng-model="a.b" > 

В вашем контроллере:

app.controller('ctrl', function ($scope) { 
    $scope.$watch('a.b', function (newValue, oldValue) { 
     console.log('oldValue=' + oldValue); 
     console.log('newValue=' + newValue); 
     //do something 
    }); 
}); 

JSFiddle

EDIT Вы упомянули новое требование в вашем редактирования, так что я изменить мой ответ. Вы не должны использовать ng-change. вы должны получить oldValue, когда элемент управления будет сфокусирован, и сохраните его в переменной, а затем получите новое значение при событии размытия. I set up a new fiddle.

В контроллере:

app.controller('ctrl', function ($scope) { 
     $scope.showValues = function() { 
      alert('oldValue = ' + $scope.oldValue); 
      alert('newValue = ' + $scope.a.b); 
     } 
    }); 

Я ваш взгляд

<input type="text" id="exampleab" ng-model="a.b" ng-init="oldValue = ''" ng-focus="oldValue = a.b" ng-blur="showValues()" />{{a.b}} 
+1

при привязке каждого символа я получаю обратный вызов .. Я DON ' t ХОЧУ, ЧТО .. Мне нужно вызвать скрипт сервера .. со старым значением в текстовом поле и новым значением после размытия – andNn

+1

Я редактирую свой ответ. Надеюсь быть полезным. – Alborz

+10

@ naveen23: Вам нужно работать над своим письмом, которое звучит очень грубо и неблагодарно. –

9

Используйте нг-модель-опции

<input type="text" ng-model="a.b" ng-change="callScriptThenServer()" ng-model-options="{updateOn: 'blur'}"/> 
0

Используйте угловые ngModelOptions с getterSetter: верно; а затем использовать вызов метода внутри «установленной» части функции.

Смотрите последний пример на этой странице: https://docs.angularjs.org/api/ng/directive/ngModelOptions

Смежные вопросы