JTe*_*ech 4 javascript forms validation angularjs angularjs-ng-model
我有以下简单形式,其中type ='email'输入绑定到模型:
<div ng-app>
<h2>Clearing ng-model</h2>
<div ng-controller="EmailCtrl">
<form name="emailForm" ng-submit="addEmail()">
<input type="email" name="email" ng-model="userEmail" placeholder="email@domain.com">
<span ng-show="emailForm.email.$invalid && emailForm.email.$dirty">invalid email</span>
<span ng-show="emailForm.$invalid">form invalid!</span>
</form>
<br/>
<button ng-click="clearViaUndefined()">clear via undefined</button>
<button ng-click="clearViaNull()">clear via null</button>
<button ng-click="clearViaEmptyString()">clear via empty string</button>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
假设用户输入了无效的电子邮件,然后单击"取消"按钮...因此需要重置表单.
在"取消"按钮的ng-click处理程序中,如果我将模型的值设置为"undefined",则不会将输入元素的$ valid属性更改回true(也不是表单的形式).
function EmailCtrl($scope) {
$scope.clearViaUndefined = function () {
$scope.userEmail = undefined;
};
$scope.clearViaNull = function () {
$scope.userEmail = null;
};
$scope.clearViaEmptyString = function () {
$scope.userEmail = "";
};
}
Run Code Online (Sandbox Code Playgroud)
如果我将模型的值设置为空字符串""或null,则$ valid属性确实设置为true.
为什么是这样?
我在这里有一个JS小提琴演示了这种行为:
Pan*_*kar 20
每当在输入或选择标记上使用ng-model时,angular内部管理字段的两个值,一个是$viewValue,另一个是$modelValue
$ viewValue - >用于视图的显示目的
$ modelValue->范围内使用的实际值.
当使用带有type='email'Angular 的输入标签时,不断验证输入值.
如果该值未作为正确的电子邮件验证,则angular内部将设置$modelValue为undefined并将form.fieldName.$ error.fieldName属性设置为true.所以那个领域变成了invalid.
如果你在控制器中检查form.fieldName.$ modelValue的值,你会发现它undefined.
因此,在控制器中将模型设置为"未定义"时,如果该字段已无效,则不进行任何更改.
但是如果你把它设置为null或者""它将起作用$modelValue并且$viewValue两者都会改变 - 使该字段再次有效.
希望这已经清除了你的理解.谢谢.
小智 5
在输入字段上添加ng-model-options ="{allowInvalid:true}"
然后尝试将ng-model设置为undefined,希望将使表单/输入再次有效
请参阅:https://docs.angularjs.org/api/ng/directive/ngModelOptions
| 归档时间: |
|
| 查看次数: |
9470 次 |
| 最近记录: |