【问题标题】:Form Validation in Angular 2 (RC5) not working as expectedAngular 2 (RC5) 中的表单验证无法按预期工作
【发布时间】:2016-08-14 16:13:47
【问题描述】:

我在 Angular 2 中实现表单验证时遇到了一点麻烦。以下是详细信息。

  1. Lo​​gin.ts 和 Login.html

export class CpLogin {
    public User: Login=new Login();
    constructor() {        
    }
    DoLogin() {
    }
}
<form (ngSubmit)="DoLogin()" #login="ngForm">
    <md-input [(ngModel)]="User.UserName" id="username" name="username" #uname="ngModel" required placeholder="Username" 
    maxLength="150" type="text" [dividerColor]="(!uname.valid || uname.pristine) ? 'accent':'primary'">
    </md-input>
    <div [hidden]="uname.valid || uname.pristine" class="alert alert-danger">
        Username is required.
    </div>

    <md-input [(ngModel)]="User.Password" id="password" name="password" #password="ngModel" required placeholder="Password" 
    maxLength="150" type="password" [dividerColor]="(!password.valid || password.pristine) ? 'accent':'primary'">
    </md-input>
    <div [hidden]="password.valid || password.pristine" class="alert alert-danger">
        Password is required.
    </div>
    <button type="submit" md-raised-button color="primary" [disabled]="!login.form.valid">Login</button>
</form>

登录表单截图

验证工作正常,除非加载登录表单用户名和密码文本显示为红色,用户名和密码 css 类如下所示。

class="ng-untouched ng-pristine ng-invalid"

(通过开发者工具验证)。我在这里错过了什么?

【问题讨论】:

    标签: angular


    【解决方案1】:

    错误在

    [dividerColor]="(!uname.valid || uname.pristine) ? 'accent':'primary'"
    

    你需要改成什么

    [dividerColor]="(!uname.valid && !uname.pristine) ? 'accent':'primary'"
    

    【讨论】:

    • 不应在初始加载时使用 class="ng-untouched ng-pristine ng-valid" 而不是 class="ng-untouched ng-pristine ng-invalid"
    • 因为是required,而且是空的,所以无效。甚至在一开始。
    猜你喜欢
    • 2017-07-19
    • 1970-01-01
    • 1970-01-01
    • 2017-03-17
    • 2018-01-16
    • 2018-01-27
    • 2014-04-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多