首页 文章

按钮单击在 Angular 2 中验证模板表单

提问于
浏览
0

我是 Angular 2 的新手。

我创建了一个简单的模板,其中有两个文本字段,我想要求字段验证这两个字段。

登录表格

<form #loginForm="ngForm" (ngSubmit)="onSubmit(loginForm)" novalidate>
    <div class="container">
        <div class="form-group">
            ooooo   <label><b>Username</b></label>
            <input type="text" placeholder="Enter Username" name="uname" required [(ngModel)]="UserData.uname" #uname="ngModel">

            <div *ngIf="loginForm.invalid"  class="alert alert-danger">
                <div [hidden]="!uname.errors.required"> Name is required </div>
            </div>
        </div>
        <div class="form-group">
            <label><b>Password</b></label>
            <input type="password" placeholder="Enter Password" name="pwd" required [(ngModel)]="UserData.pwd" #pwd="ngModel">
            <div *ngIf="UserData.pwd.errors && (UserData.pwd.dirty || UserData.pwd.touched)" class="alert alert-danger">
                <div [hidden]="!UserData.pwd.errors.required">Password is required </div>
            </div>
            <button type="submit"  >Login</button>
        </div>
    </div>
</form>

我的组件

import { Component } from "@angular/core"
import { User } from "./UserModel"

@Component({
    selector: 'my-login',
    templateUrl:"app/Login/login.html"
})

export class LoginComponent
{
    //alert: any("hello");
    UserData: User = new User("", "");

    submitted = false;

    onSubmit(form: any) {
        alert("dfsdfsd" + form);
        if (!form.invalid) {
            alert(this.UserData.uname);
            alert(this.UserData.pwd);
            this.submitted = true;
        }
    }

}

我想实施的是 -

  • 当表单加载时,不应出现验证消息?

  • 当用户点击提交按钮时,应显示所需的消息?

  • 在两个文本框中我都应用了不同类型的检查来显示不一致的消息?所以应该有一个一致的方法来解决这个问题。

非常感谢您的帮助。

1 回答

  • 0

    也许使用submitted变量,并在模板中使用它,以便不显示消息,直到submitted为真,我们在提交函数中将其设置为。

    你也不需要这里的 two-way-binding,因为你的表格产生的对象可以直接分配给你的UserData

    我刚刚设置的验证消息就像这样,我们将用户名作为目标:

    <div *ngIf="uname.errors?.required && submitted"> Name is required </div>
    

    在你的提交函数中,我将loginForm.value作为参数而不是loginForm传递。这样就可以准备好使用表单对象:)

    在您的函数中,您可以将对象分配给UserData变量。

    onSubmit(form: any) {
      this.submitted = true;
      this.UserData = form;
    }
    

    如果你想保留 two-way-binding,那当然是完全可能的! :)

    **** DEMO

相关问题