更改`ng-required`调用`ng-change`

Mat*_*hyn 9 javascript forms angularjs

我使用AngularJS 1.5.8在我的应用程序中有一个奇怪的行为:

plunker(https://plnkr.co/edit/zaHVJeK8hdxk2gaOL9Pf?p=preview)和视频(http://recordit.co/eszvfdfC9S)

  • 步骤1.开始更改ng-required不调用ng-change函数
  • 步骤2.在更改inputAND 之后(删除它们input)是ng-requiredDOES调用ng-change功能

预期的行为?

  • 步骤2.在更改inputAND 之后(删除它们input)ng-required不应该调用ng-change函数.就像它在开始时一样,并且当输入具有某些价值时

如果这是一个错误,请告诉我.如果没有那么为什么不总是甚至根本不换ng-required电话ng-change

ANSWER FOUND ----------------------------------------------- -------------------------------------------------- ------

NgModelController有两个属性:$ viewValue(用户输入的值)和$ modelValue(绑定到模型的值).当用户输入的值未通过验证时,NgModelController将模型设置为undefined.

在AngularJS 1.3中,他们添加了ng-model-options指令.它允许您配置模型更新的方式/时间.您可以使用allowInvalid选项来防止将模型设置为undefined:

ng-model-options="{allowInvalid: true}"
Run Code Online (Sandbox Code Playgroud)

小智 7

您应该添加

        ng-model-options="{allowInvalid: true}"
Run Code Online (Sandbox Code Playgroud)

所以最终结果将是

<input type="text" 
    ng-change="$ctrl.onChange()" 
    ng-required="$ctrl.isRequired"
    ng-model-options="{allowInvalid: true}"
    ng-model="$ctrl.val"
    />
Run Code Online (Sandbox Code Playgroud)