当前位置: 首页 > 面试题库 >

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

阴永逸
2023-03-14
问题内容

我有以下简单形式,其中将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小提琴在这里演示行为:

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


问题答案:

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

$ viewValue->用于在视图上显示

$ modelValue->在范围内使用的实际值。

type='email'Angular 一起使用输入标签时,将不断验证输入值。

并且,如果该值未验证为正确的电子邮件,则angular内部将设置$modelValueundefined,并将form.fieldName。$
error.fieldName属性设置为true。这样那个领域就变成了invalid

如果在控制器中检查form.fieldName。$ modelValue的值,则将发现它为undefined

因此,当字段已经无效时,在控制器中将模型设置为“未定义”,则不会发生任何变化。

但是,如果将其设置为null"",它将作为$modelValue和起作用,并且$viewValue两者都会更改-使该字段再次有效。

希望这能清除您的理解。谢谢。



 类似资料:
  • 问题内容: 我是AngularJS的新手,我遇到的一个问题是无法解决,在stackoverflow上也有类似的问题,但似乎并没有帮助我。我基本上有一个可以通过ng- click更新的表单,但是一旦我在任何文本框中输入文本,这些文本框就不再更新。 这是我的HTML 这是有人单击链接时调用的我的函数 问题答案: 您的链接需要登录。 如果我不得不猜测您的问题,则可能与角度范围问题有关。尝试将ng-mod

  • 问题内容: 我有一个提琴手设置,当我单击重置按钮时,它应该清除输入控件,这似乎有效,但是当输入 是否有我不了解的问题或东西。 当我设定 这似乎清除了其他输入类型,但未清除输入type =’url’。 有人知道为什么吗? 问题答案: 当您在input [type =“ url”]中没有有效值时,就会看到您遇到的问题。无效值仅停留在视图( 输入字段 )中,不会被推送到ng- model内部的scope

  • 本文向大家介绍null == undefined为什么?相关面试题,主要包含被问及null == undefined为什么?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 要比较相等性之前,不能将null 和 undefined 转换成其他任何值,但 null == undefined 会返回 true 。ECMAScript规范中是这样定义的。

  • 问题内容: 目前,我正在学习AngularJS和我难以理解的区别和。 谁能告诉我它们的区别以及何时应使用另一种? 问题答案: ng-bind 具有单向数据绑定($ scope->视图)。它有一个快捷方式 ,用于显示插入到html中的范围值,其中是变量名。 ng-model 用于放置在表单元素中,并具有双向数据绑定($ scope-> view and view-> $ scope),例如。

  • 问题内容: 有人可以向我解释为什么在这个简单示例中我无法获得当前选择的单选按钮。我正在尝试使用ng-repeat指令动态生成单选按钮,并使用ng- model获取当前选择的单选按钮。像这样: 模板: 控制器: 问题答案: 因为当它在放置指令的位置重复模板时,确实会在每次迭代中创建一个新的子范围(通常是继承的)。 那么当创建一个新的原型继承的子范围时会发生什么呢? 在子作用域中,它包含所有属性,其中

  • 我正在尝试使用用户对web表单的输入创建一个用户名cookie。然而,它不起作用,我不知道为什么。你知道问题出在哪里吗?