输入文本框中的角度ng变化与旧值

时间:2014-01-03 16:37:28

标签: angularjs textbox angularjs-ng-change

<input type="text" id="exampleab"
ng-model="a.b"
ui-event="{ blur : 'callScriptThenServer()' }" >

由于某些原因,文本框上的ng-change无效,所以我正在使用它;使用Angular-ui&#39; ui-events

问题

我想仅在值更改时调用该函数,而也希望在回调中使用旧值。(因为我想将oldValue发送到服务器)

我不想通过纯指令路线,因为这些事件的发生次数很多

NG-CHANGE:关于每个角色的变化,我得到一个回调。我不想要那个。我需要调用服务器脚本..使用文本框中的旧值和模糊后的新值

4 个答案:

答案 0 :(得分:16)

您可以观察变量以同时拥有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

修改 您在编辑中提到了新要求,因此我编辑了我的答案。 你不应该使用ng-change。当控件被聚焦时你应该得到oldValue并将其保存在变量中,然后在blur事件上获得新值。 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 :(得分:10)

使用ng-model-options

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

答案 2 :(得分: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

答案 3 :(得分:0)

将Angular ngModelOptions与getterSetter一起使用:true;然后在函数的“set”部分内使用方法调用。

请参阅此页面上的最后一个示例: https://docs.angularjs.org/api/ng/directive/ngModelOptions