当前位置: 首页 > 知识库问答 >
问题:

Angular 2多部分表单验证,如何检查单个输入的有效性

孙钱青
2023-03-14

我有一个表单,表单有多个输入,它们都绑定到不同的变量。在提交表单之前,我需要进行有效性检查、原始检查等。例如,如果表单的每个部分都是原始的,或者如果某些内容无效,我希望禁用“提交”按钮。

使用Angular 5,我试图访问每个输入字段的.pristine.valid.invalid标志,但值未定义或“无法获取未定义的.pristine”。

我能够在整个表单上获得这些标志,但这没有帮助,因为我想知道如何为每个单独的输入获得这些标志。

这是我当前的代码(为了简化示例,我删除了许多输入)。

<form #editDetailsForm="ngForm" name="editDetailsForm" >
    <label for="name"> Name </label>
    <input type="text" id="name" name="name" maxlength="40" [(ngModel)]="myName" required />

    <label for="description"> Description </label>
    <textarea id="description" name="description" maxlength="250" [(ngModel)]="myDescription" required ></textarea>

    <button id="submit" type="button"
        [disabled]="saveButtonDisabled(editDetailsForm.invalid, editDetailsForm.name.invalid, editDetailsForm.description.invalid)"
        (click)="updateDetails()" >
        Save
    </button>
</form>

如果您看到,我将Save按钮上的disabled属性绑定到saveButtonDisabled()函数,在该函数中我要传递有关每个输入有效性的信息。第一个参数editDetailsForm.invalid返回true或false,但其他值返回undefined。

如何检查这些单独输入的有效性?

编辑:我意识到我可以在我的组件中导出所有这些信息,因为所有的输入值都是绑定的。不过,只需检查一两个标志就更容易了。

共有3个答案

顾宏朗
2023-03-14

制造了一场闪电战。https://stackblitz.com/edit/angular-5ir4k7

为ngModel添加了模板参考变量,并使用isValid进行验证。

倪鹏
2023-03-14

您可以使用.controls属性访问输入控件,如:

    <button id="submit" type="button"
    [disabled]="editDetailsForm.controls.name?.invalid || editDetailsForm.controls.description?.invalid">
钦良弼
2023-03-14

我不确定我是否完全理解你想要做什么,但这是你访问表单控件的方式。原始的,。

 <input type="text" id="name" name="name" #name="ngModel" maxlength="40" [(ngModel)]="myName" required />

#name="ngModel"设置FormControl角创建的模板引用

那么你应该可以做这样的事情:

<input type="text" id="name" name="name" #name="ngModel" maxlength="40" [(ngModel)]="myName" required />
<div *ngIf="name.pristine">
  Name is Pristine
</div>

为了澄清,单个表单字段会冒泡到表单本身。所以如果任何领域被触及,那么整个形式将是原始的==假的。

 类似资料:
  • 开发Web的一个原则就是,不能信任用户输入的任何信息,所以验证和过滤用户的输入信息就变得非常重要,我们经常会在微博、新闻中听到某某网站被入侵了,存在什么漏洞,这些大多是因为网站对于用户输入的信息没有做严格的验证引起的,所以为了编写出安全可靠的Web程序,验证表单输入的意义重大。 我们平常编写Web应用主要有两方面的数据验证,一个是在页面端的js验证(目前在这方面有很多的插件库,比如Validati

  • 我试图找到一个完整的模式列表,用于通过HTML5表单验证各种类型的输入,特别是、、等等,但我找不到任何模式。目前,这些输入验证的内置版本远非完美(甚至不检查输入的内容是否是电话号码)。所以我想知道,我可以使用哪些模式来验证用户在输入中输入了正确的格式? 以下是一些默认验证允许不允许的输入的例子: 这个字段允许在@后面有不正确域的电子邮件,它允许地址以破折号或句号开始或结束,这也是不允许的。因此,是

  • 问题内容: 我的联系页面形式如下, 需要为所有字段添加验证。谁能帮我在此反应形式中添加验证? 问题答案: 您应该避免使用refs,可以使用function来实现。 每次更改时,请更新已更改字段的状态。 然后,您可以轻松地检查该字段是否为空或您想要的其他内容。 您可以执行以下操作: 在此示例中,我仅对电子邮件和姓名进行了验证,但是您知道如何进行验证。其余的你可以自己做。 也许有更好的方法,但是您会明

  • 我目前正在尝试为一个我为好玩而开发的网站创建一个登录/创建帐户页面。在创建帐户表单中,我有一个用户名、姓名、电子邮件、密码和验证密码的输入字段。我在输入字段中也有模式,以便用户生成有效的帐户信息。以下为表格: 澄清:用户名模式要求您的用户名只有大写和小写字母和数字,并且必须至少包含5个字符,最多包含40个字符。电子邮件要求您输入有效的电子邮件地址模式。密码要求至少包含8个字符,并且必须包含大小写字

  • 我正在寻找表单验证的最有效方法,我想知道我目前的植入是否不仅是可能的,而且在动态缩放时是可持续的。看看吧: (警告:忽略愚蠢的HTML类名) 是否有一种方法可以在输入中将forEach空白字段添加到数组中的错误字符串?现在,它只在数组中抛出一个字符串,作为它命中的第一个空白字段。

  • 当尝试验证表单(获取请求)时,我知道Result绑定,当尝试验证请求正文时,我也知道@Valid,但我不知道如何验证multipartForm Request参数。当我将json转换为对象时,我有一个带有请求参数的多部分表单,其中包含我的User.class.的json字符串表示形式, 如何检查user类中的参数是否满足要求,例如(电子邮件中有'@'或名字没有数字值)? 这是我的代码,控制器: 这