按钮单击在Angular 2

时间:2017-06-12 14:28:00

标签: forms angular validation angular2-template

我是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. 当表单加载时,不会出现验证消息?
  2. 当用户点击提交按钮时,应显示所需的消息?
  3. 在两个文本框中我都应用了不同类型的检查来显示不一致的消息?所以应该有一致的方法来解决这个问题。
  4. 非常感谢你的帮助。

1 个答案:

答案 0 :(得分:0)

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

此外,您不需要双向绑定,因为您的表单生成的对象可以直接分配给您的UserData

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

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

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

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

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

如果你想保持双向绑定,那当然是完全可能的! :)

<强> DEMO