使用ng-keyup增加或减少输入的ng模型

时间:2014-04-01 23:29:10

标签: angularjs javascript-events angularjs-directive

我想使用ng-keyup来监视向上和向下箭头键,并增加或减少输入中的值。这似乎应该是直截了当的,但这个小提琴不起作用:http://jsfiddle.net/a8tgW/3/

HTML

<div  ng-controller="MyCtrl">
  <input type="text" ng-model="minPotatoes" ng-keyup="onKeyup($event, minPotatoes)" />
  <input type="text" ng-model="maxPotatoes" ng-keyup="onKeyup($event, maxPotatoes)" />
</div>

JS

function MyCtrl($scope) {
  $scope.onKeyup = function (evt, val) {
    if(evt.keyCode === 40) {
      val -= 1
      console.log("decrementing val", val)
    } else if (evt.keyCode === 38) {
      val += 1
      console.log("incrementing val", val)
    }
  }
  $scope.minPotatoes = 2;
  $scope.maxPotatoes = 10;
}

我已尝试使用$apply,但摘要已在进行中。我已阅读this个问题,但它使用了一个无法访问模型参考的外部监听器。

我可以直接引用范围值,而不是传入的值,但如果密钥处理程序不知道它正在影响的模型,它就会更少耦合。

1 个答案:

答案 0 :(得分:7)

您希望更改范围变量而不是本地val变量。

<input type="text" ng-model="potatoCount" ng-keyup="onKeyup($event, 'potatoCount')" />

function MyCtrl($scope) {
    $scope.onKeyup = function (evt, val) {
        if(evt.keyCode === 40) {
            --$scope[val];
            console.log("decrementing val");
        } else if (evt.keyCode === 38) {
            ++$scope[val];
            console.log("incrementing val");
        }
    };
    $scope.potatoCount = 42;
}

http://jsfiddle.net/ALjR5/2