基于Angular Reactive Forms验证更改输入元素CSS

时间:2018-01-26 12:26:01

标签: javascript html css angular

我有一个简单的反应形式:

this.loginForm = this._fb.group({
  email: ['', [Validators.required, Validators.pattern('^[A-Za-z0-9._%+-]+@gmail.com$')]],
  password: ['', Validators.required]
});

关于HTML:

<!------------------------- PASSWORD FIELD ------------------------->
<div class="uk-margin">
  <input type="password" class="uk-input"
         placeholder="Enter Password" formControlName="password">

  <!----- VALIDATION WARNINGS ----->
  <div *ngIf="loginForm.get('password').touched">
    <div *ngIf="loginForm.get('password').hasError('required')">
      <div class="uk-text-danger"> Password is required.</div>
    </div>
  </div>
</div>

然后在CSS中:

.ng-valid[required] {
   border: 5px solid #42A948;
 }

.ng-invalid[required] {
   border: 5px solid red; 
 }

正在应用ng-valid/invalid CSS。我想更改输入字段边框的颜色。但CSS并不适用于我。我究竟做错了什么?

更新

enter image description here

2 个答案:

答案 0 :(得分:0)

始终应用

ng-invalid和ng-valid,您可以进一步自定义css以解决此问题。

ng-valid.ng-touched {
  border: 5px solid #42A948;
}

ng-invalid.ng-touched {
  border: 5px solid red;
}

答案 1 :(得分:0)

您可以根据错误将[ngClass]用于条件类。例如:

<!------------------------- PASSWORD FIELD ------------------------->
    <div class="uk-margin">
      <input
        type="password"
        class="uk-input"
        placeholder="Enter Password"
        formControlName="password"
        [ngClass]="{'has-error': loginForm.get('password').touched && loginForm.get('password').hasError('required')}">

      <!----- VALIDATION WARNINGS ----->
      <div *ngIf="loginForm.get('password').touched">
        <div *ngIf="loginForm.get('password').hasError('required')">
          <div class="uk-text-danger"> Password is required.</div>
        </div>
      </div>
    </div>

然后在CSS中:

uk-input.has-error{
  /* your styles */
}