【问题标题】:Angular ng-change in input textbox with old value具有旧值的输入文本框中的角度 ng-change
【发布时间】:2014-01-03 16:37:28
【问题描述】:
<input type="text" id="exampleab"
ng-model="a.b"
ui-event="{ blur : 'callScriptThenServer()' }" >

由于某些原因,文本框上的ng-change 不起作用,所以我正在使用它;使用 Angular-ui 的ui-events

问题

我只想在 值改变并且还想要回调中的旧值时调用该函数。(因为我想将 oldValue 发送到服务器) .

我不想通过纯指令路线,因为这种情况太多了

NG-CHANGE:在每个更改的字符上我都会收到一个回调。我不想要那个。我需要使用文本框中的旧值和模糊后的新值调用服务器脚本..

【问题讨论】:

  • 您需要在框中输入一些内容才能使用该示例。更改时会提醒
  • 在绑定每个字符时我得到一个回调..我不想要那个..我需要调用服务器脚本..在文本框中使用旧值和模糊后的新值
  • ng-change 无法正常工作,因为我使用的是旧版本的 ngularjs
  • 好的,现在你有了新的 angularjs,只需使用 ng-blur= 而不是 ng-change= 这样当用户完成输入时,值将被发送到服务器(在某些情况下请注意用户将键入一个字符并切换到下一个输入,您需要在控制器中实现一个 chekc)

标签: angularjs textbox angularjs-ng-change


【解决方案1】:

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

【讨论】:

  • 在绑定每个字符时我得到一个回调..我不想要那个..我需要调用服务器脚本..在文本框中使用旧值和模糊后的新值
  • @naveen23:你需要努力写作,这听起来很粗鲁和不感恩。
  • @phresnel 为什么他需要这样做?当人们没有正确阅读他的要求时......这是他浪费时间......
  • @Elisa:如果在帮助一些陌生人免费的努力中存在部分误解证明粗鲁和攻击性是正当的在你的世界里,我很高兴我们不是朋友。你甚至没有意识到,如果有误解,尤其是回答者浪费时间,不是提问者。 -- 编辑:OTOH,在看到你的 1/10 回答/提问比率,或者更具体地说是 1/40 的实际投票后,你的意见不再让我感到惊讶。这一次,似乎表明没有捐赠一些空闲时间的经验。你是parasite吗?
  • @Alborz 非常感谢您提供如此出色的解决方案。我在玩 ng-change。现在我用 ng-focus 和 ng-blur 事件替换了它。它工作正常。我正在接受新旧价值观。干杯!!!
【解决方案2】:

使用 ng-model-options

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

【讨论】:

    【解决方案3】:

    您可以使用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

    【讨论】:

    • 在绑定每个字符时我得到一个回调..我不想要那个..我需要调用服务器脚本..在文本框中使用旧值和模糊后的新值
    【解决方案4】:

    使用 Angular ngModelOptions 和 getterSetter:true;然后在函数的“set”部分使用方法调用。

    查看本页的最后一个示例: https://docs.angularjs.org/api/ng/directive/ngModelOptions

    【讨论】:

      猜你喜欢
      • 2016-10-25
      • 1970-01-01
      • 1970-01-01
      • 2014-12-14
      • 1970-01-01
      • 1970-01-01
      • 2017-07-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多