【发布时间】:2015-04-04 22:32:29
【问题描述】:
我有以下简单的表单,其中 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>
假设用户输入了无效的电子邮件,但随后单击了“取消”按钮...因此需要重置表单。
在“取消”按钮的 ng-click 处理程序中,如果我将模型的值设置为“未定义”,这不会将输入元素的 $valid 属性更改回 true(也不会更改表单)。
function EmailCtrl($scope) {
$scope.clearViaUndefined = function () {
$scope.userEmail = undefined;
};
$scope.clearViaNull = function () {
$scope.userEmail = null;
};
$scope.clearViaEmptyString = function () {
$scope.userEmail = "";
};
}
如果我将模型的值设置为空字符串 "" 或 null,则 $valid 属性会被设置回 true。
这是为什么?
我在这里有一个 JS Fiddle 来演示这种行为:
【问题讨论】:
-
我没有发现问题——所有按钮都为我清除了输入表单...(Chrome)。
-
只有当您输入无效的电子邮件时才会出现问题 - 因为我正在尝试将表单的 $valid 状态从“false”重置回“true” - 所以如果您输入有效的电子邮件,那么 $valid 值已经是“真”——希望这是有道理的。
标签: javascript angularjs forms validation angularjs-ng-model