15

我在一个带有一些验证的表单中有一个输入字段。它就像一个魅力。

它基本上看起来像这样:

<input
  class="form-control"
  type="number"
  ng-model="zipcode"
  ng-minlength="5"
  ng-maxlength="5"
  id="zipcode"
  name="zipcode"
  required
>

一个工作 plunkr 在这里:http ://plnkr.co/edit/H0h59kG75T5MGE9cAhSo?p=preview

但现在我也想对每一个输入变化做出反应——无论是否有效。因此,例如,如果输入字段包含“123”,则它无效并且该值不会传输到我的模型 - 没关系。但我仍然希望获得对 Web 服务执行一些中间请求的价值。

有任何想法吗?

4

3 回答 3

13

首先在控制器中调用表单元素,然后使用$viewValue属性:

看法 :

<form name="form">
<input
  ...
  ng-model="zipcode"
  ng-change="getRawValue(form)"
  name="zipcode"
  required
>
</form>

控制器:

$scope.getRawValue = function(form) {
  var rawValue = form.zipcode.$viewValue;
}
于 2015-02-18T15:10:05.710 回答
12

Angular 1.3 为此引入了一个真正的答案:allowInvalidngModelOptions中。

例子:

<input 
    type="text"
    name="userName"
    ng-model="user.name"
    ng-model-options="{allowInvalid: true}"
>
于 2016-05-21T00:23:22.153 回答
6

这是我为您的方案提出的建议。

基本上你可以编写一个需要ngModel(ngModelController)的指令。ngModelController 有一个解析器数组,它调用它以管道方式解析视图值。如果验证失败,这些解析器不会更新模型。如果您在此解析器数组的开头注入自定义解析器,您可以获得每个视图更改值并使用它做任何您想做的事情。

在这里查看我的 plunkr http://plnkr.co/edit/ruB42xHWj7dBxe885OGy?p=preview (见控制台)

基本代码是

ngModelCtrl.$parsers.splice(0,0,(function (viewValue) {
              console.log("The view value is:"+viewValue)
                return viewValue;           
            }));

另请参阅ngModelController 文档

于 2013-11-06T17:09:20.543 回答