我正在寻找解决方法,以便在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
请帮忙,
答案 0 :(得分:1)
检查控制台是否有错误是有帮助的。基本上问题不在于退格,而是ng-repeat
尝试重复输入。因此,当您点击退格键时,数组会尝试推送完全相同的项目。
而是使用具有所需文本的对象:
$scope.lines.push({ text: newValue });
另外,请使用ng-change
代替$watch
。这是确切的用例。
这是一个有效的插件:http://plnkr.co/edit/pMyvHXDEaCSmvyM8N5GH?p=preview
看起来fessy实际上想要保留默认情况下以角度修剪的尾随空格。在这种情况下,请查看ng-trim
:https://docs.angularjs.org/api/ng/input/input%5Btext%5D
基本上在输入声明中设置ng-trim="false"
将禁用自动修剪。
答案 1 :(得分:1)
正如@Matt指出的那样,这是因为数组中的重复。角度重复通过唯一ID跟踪ng-repeat。如果未指定,则将其视为重复值,如此情况下的行,如果存在重复值,则此值将被拒绝。 但是ng-repeat提供了重复选项,您可以选择通过一些独特的参数提供跟踪。对于您的情况,只需用
替换ng-repeatng-repeat="line in lines track by $index"
让我知道这是否有效。
我猜上面的逻辑工作正常。 PLUNKER