如何观察字符串更改 - 退格添加,角度?

时间:2014-06-09 16:57:50

标签: javascript android angularjs

我正在寻找解决方法,以便在Android上捕获用户按下退格键(又名键类型32)。它适用于镀铬,但不适用于设备。

我的尝试之一是使用简单的watch

但是$watch没有按下退格键。

这是我到目前为止所做的:

<div class='form-group'>
   <label>Field 1</label>
  <input type='text' ng-model='f1' required class="form-control">
 </div>

<div ng-repeat="line in lines">
   {{line}}
</div>

  $scope.lines = [];

  $scope.$watch(function () {
    return $scope.f1;
},
function (newValue, oldValue) {
    $scope.lines.push(newValue);
}, true);

这是 Plunker

中的演示

[编辑]

我尝试ng-change - 获得相同的结果。当我按退格键时没有任何事情发生

使用ng-change进行演示 Plunker

请帮忙,

2 个答案:

答案 0 :(得分:1)

检查控制台是否有错误是有帮助的。基本上问题不在于退格,而是ng-repeat尝试重复输入。因此,当您点击退格键时,数组会尝试推送完全相同的项目。

而是使用具有所需文本的对象:

$scope.lines.push({ text: newValue });

另外,请使用ng-change代替$watch。这是确切的用例。

这是一个有效的插件:http://plnkr.co/edit/pMyvHXDEaCSmvyM8N5GH?p=preview


看起来fessy实际上想要保留默认情况下以角度修剪的尾随空格。在这种情况下,请查看ng-trimhttps://docs.angularjs.org/api/ng/input/input%5Btext%5D

基本上在输入声明中设置ng-trim="false"将禁用自动修剪。

答案 1 :(得分:1)

正如@Matt指出的那样,这是因为数组中的重复。角度重复通过唯一ID跟踪ng-repeat。如果未指定,则将其视为重复值,如此情况下的行,如果存在重复值,则此值将被拒绝。 但是ng-repeat提供了重复选项,您可以选择通过一些独特的参数提供跟踪。对于您的情况,只需用

替换ng-repeat
ng-repeat="line in lines track by $index"

让我知道这是否有效。

我猜上面的逻辑工作正常。 PLUNKER