gpt4 book ai didi

javascript - 为什么将 ng-model 设置为 undefined 不会使表单/输入再次有效?

转载 作者:搜寻专家 更新时间:2023-11-01 04:44:16 25 4
gpt4 key购买 nike

我有以下简单表单,其中 type='email' 输入绑定(bind)到模型:

<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(也不会将表单的属性更改回 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 演示了这个行为:

http://jsfiddle.net/U3pVM/12830/

最佳答案

每当您在输入或选择标签上使用 ng-model 时,angular 在内部管理该字段的两个值,一个是 $viewValue,另一个是 $modelValue

$viewValue -> Used for display purpose on view

$modelValue-> Actual value which is used inside scope.

当使用带有 type='email' 的输入标签时,Angular 会不断验证输入值。

如果该值未验证为正确的电子邮件, Angular 内部会将 $modelValue 设置为 undefined 并将设置 form.fieldName.$error.fieldName 属性为真。因此该字段变为无效

如果您在 Controller 中检查 form.fieldName.$modelValue 的值,您会发现它是 undefined

因此在 Controller 中将模型设置为“未定义”,当字段已经无效时,什么也不会改变。

但是如果你将它设置为 null"" 它将作为 $modelValue$viewValue两者都得到改变 - 使该字段再次有效。

希望这已经清除了您的理解。谢谢。

关于javascript - 为什么将 ng-model 设置为 undefined 不会使表单/输入再次有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28337714/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com