[解決済み] Angular6でパスワードの検証を確認する [重複]。
質問
を行いたい。
パスワード
と
パスワードの確認
バリデーションは
材料
コンポーネントのみで、エラーメッセージは
パスワードの確認
フィールドの下にエラーメッセージを表示します。
confirm password field doesn't match
そして
if it is empty
.達成することができない多くのリソースを試してみました。
試してみた この動画 も試してみました。
これは、私が探している材料コンポーネントです。
HTML
<mat-form-field >
<input matInput placeholder="New password" [type]="hide ? 'password'
: 'text'" [formControl]="passFormControl" required>
<mat-icon matSuffix (click)="hide = !hide">{{hide ? 'visibility' :
'visibility_off'}}</mat-icon>
<mat-error *ngIf="passFormControl.hasError('required')">
Please enter your newpassword
</mat-error>
</mat-form-field>
<mat-form-field >
<input matInput placeholder="Confirm password" [type]="hide ?
'password' : 'text'" [formControl]="confirmFormControl"
required>
<mat-icon matSuffix (click)="hide = !hide">{{hide ? 'visibility' :
'visibility_off'}}</mat-icon>
<mat-error *ngIf="confirmFormControl.hasError('required')">
Confirm your password
</mat-error>
</mat-form-field>
<ブロッククオート
TS
import {Component, OnInit } from '@angular/core';
import {FormControl, FormGroupDirective, NgForm, Validators} from
'@angular/forms';
import {ErrorStateMatcher} from '@angular/material/core';
@Component({
selector: 'asd-set-pass',
templateUrl: './set-pass.component.html',
styleUrls: ['./set-pass.component.css']
})
passFormControl = new FormControl('', [
Validators.required,
]);
confirmFormControl = new FormControl('', [
Validators.required,
]);
hide =true;
}
以下の条件では正常に検証できています。 1)パスワードと確認用パスワードの欄が空の場合、エラーメッセージが表示されます。
(.ts)ファイルのフィールドと比較したいのですが、空のフィールドは検証され、パスワードの確認フィールドが空の場合はエラーになります。
どのように解決するのですか?
この質問は、次の2つの回答の組み合わせで解決できるかもしれません。 https://stackoverflow.com/a/43493648/6294072 と https://stackoverflow.com/a/47670892/6294072
まず最初に、パスワードをチェックするためのカスタムバリデータが必要で、次のようになります。
checkPasswords: ValidatorFn = (group: AbstractControl): ValidationErrors | null => {
let pass = group.get('password').value;
let confirmPass = group.get('confirmPassword').value
return pass === confirmPass ? null : { notSame: true }
}
で、2つのフォームコントロールではなく、フィールド用のフォームグループを作成し、フォームグループ用のカスタムバリデータをマークします。
this.myForm = this.fb.group({
password: ['', [Validators.required]],
confirmPassword: ['']
}, { validators: this.checkPasswords })
で、他の回答にもあるように
mat-error
がある場合のみ表示されます。
フォームコントロール
が無効な場合にのみ表示されるので、エラー状態のマッチャーが必要です。
export class MyErrorStateMatcher implements ErrorStateMatcher {
isErrorState(control: FormControl | null, form: FormGroupDirective | NgForm | null): boolean {
const invalidCtrl = !!(control?.invalid && control?.parent?.dirty);
const invalidParent = !!(control?.parent?.invalid && control?.parent?.dirty);
return invalidCtrl || invalidParent;
}
}
の中で、エラーメッセージを表示するタイミングを調整することができます。私なら、エラーメッセージを表示するのは
password
フィールドがタッチされたときのみメッセージを表示します。また、上記のように
required
バリデーターを
confirmPassword
フィールドにあるバリデータを使います。
次にコンポーネントで、新しい
ErrorStateMatcher
:
matcher = new MyErrorStateMatcher();
最後に、テンプレートは次のようになります。
<form [formGroup]="myForm">
<mat-form-field>
<input matInput placeholder="New password" formControlName="password" required>
<mat-error *ngIf="myForm.hasError('required', 'password')">
Please enter your new password
</mat-error>
</mat-form-field>
<mat-form-field>
<input matInput placeholder="Confirm password" formControlName="confirmPassword" [errorStateMatcher]="matcher">
<mat-error *ngIf="myForm.hasError('notSame')">
Passwords do not match
</mat-error>
</mat-form-field>
</form>
上記のコードを使ったデモを紹介します。 StackBlitz
関連
-
[解決済み] Angular HTMLバインディング
-
[解決済み] パイプ ' ' が見つかりません。
-
[解決済み] ExpressionChangedAfterItHasBeenCheckedError: チェックされた後に、式が変更されました。以前の値: 'undefined'
-
[解決済み] Typescript におけるインターフェースとクラスの違い
-
[解決済み] 角度の2つのスイッチケース値
-
[解決済み] Typescriptで文字列をbooleanに変換する方法 Angular 4
-
[解決済み] Angular 2 - ルーティング - ObservableでCanActivateする。
-
[解決済み] angular 4 ユニットテストエラー `TypeError: ctor is not a constructor`.
-
[解決済み] Angular 2でコンポーネントの静的変数をHTMLにバインドする方法は?
-
[解決済み] mat-selectでデフォルトのオプションを設定する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Angular Materialでのデフォルトのソート - ヘッダーのソート
-
[解決済み] trackBy` と `ngFor` の使い方
-
[解決済み] プロパティ 'X' はプライベートであり、クラス 'xyzComponent' 内でのみアクセス可能です。
-
[解決済み] Angular CLIで特定のバージョンのAngularをインストールするには?
-
[解決済み] Reactive Forms - フィールドをタッチしたものとしてマークする
-
[解決済み] angularで「タイプ 'EventEmitter' は一般的ではありません」ERROR。
-
[解決済み] Angularで確認ダイアログを作る簡単な方法?
-
[解決済み] Angular2 Tutorial (Tour of Heroes)です。モジュール 'angular2-in-memory-web-api' を見つけることができません。
-
[解決済み] Tslint - type trivially inferred - なぜここに型を入れるのはバッドプラクティスなのですか?
-
[解決済み] Angular2で生のhtmlをバインドする方法 [重複]。