formErrors = { 'email': '', 'displayName': '', // ... }; validatorMessages = { //... 'password': { 'required': '必填欄位', 'pattern': '至少須包含一字母一數字', 'minlength': '長度至少為6', 'maxlength': '長度最多為15' }, 'confirmPassword': { 'required': '必填欄位', }, 'matchPassword': '密碼不相符' } //... private onValueChanged(data?: any) { if (!this.registerForm) { return; } const form = this.registerForm; for (const field in this.formErrors) { // clear previous error message (if any) this.formErrors[field] = ''; switch (field) { case 'email': case 'displayName': //... break; case 'password': case 'confirmPassword': var group = form.get('passwordGroup'); var control = group.get(field); if (control && control.dirty && !control.valid) { const messages = this.validatorMessages[field]; for (const key in control.errors) { this.formErrors[field] += messages[key] + ' '; } } break; case 'matchPassword': var group = form.get('passwordGroup'); if (group.get('password').dirty && group.get('confirmPassword').dirty && group.errors && group.errors.matchPassword) { this.formErrors[field] = this.validatorMessages[field]; } break; } } }