2014-04-01 78 views
3

我想使用ng-keyup来监视上下箭头键并递增或递减输入值。这似乎应该是简单的,但这种小提琴不起作用:http://jsfiddle.net/a8tgW/3/使用ng-keyup增加或减少输入的ng模型

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问题,但它使用无法访问模型引用的外部侦听器。

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

回答

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

+0

我以为它通过一个参考。实际上,我需要它,因为实际使用情况是带有两个手柄的滑块。 keyup处理程序不知道要增加/减少哪个模型。 – SimplGy

+0

好的,检查v2的小提琴。您可以将范围变量名称作为字符串而不是当前值传递,然后增加'$ scope [val]'。 –

+0

聪明!我写了自定义指令,一个用于'keypress-uparrow'和一个用于'keypress-downarrow'。这有用,但我更喜欢你的! – SimplGy