我感觉很亲密,但不再那么肯定了 . 也许完全做错了 . 基本上,用户注册发生在应用程序的三个区域 . 因此,我决定为用户创建一个单独的组件并进行自己的验证 . 该组件将向父组件发出true或false,同时在每个表单元素上显示错误消息 .
子组件是:
export class UserRegistrationComponent implements OnInit {
@Input('group')
@Output() userFormIsValid = new EventEmitter<boolean>();
first_name:FormControl;
ngOnInit() {
this.first_name = new FormControl('', [
Validators.required,
Validators.minLength(3),
Validators.maxLength(30),
Validators.pattern('^[a-zA-Z ]+$')
]);
}
onChanges(): void {
this.userFormIsValid.emit(this.first_name.valid)
}
}
模板:
<input type="text" [formControl]="first_name" (input)="onChanges()" class="form-control"/>
<div class="alert" *ngIf="!first_name.valid && first_name.touched">
First name must be at least 3 alaphabets long
</div>
我的父组件:
user_form_is_valid:boolean = false;
//the form
this.rForm = fb.group({
'user': this.fb.group({ first_name: '' }),
'avatar': [null, []],
'client_name': [null, [Validators.required, Validators.pattern('^[a-zA-Z ]+$')]]
});
emittedUserFormValidStatus($event) {
//user-registration componenet emitts if the form is ok or not.
this.user_form_is_valid = false;
if ($event && $event != null) {
this.user_form_is_valid = $event;
}
}
模板:
<app-user-registration (userFormIsValid)="emittedUserFormValidStatus($event)" ></app-user-registration>
<!--Other business related elements/form controls goes here-->
<input type="submit" class="btn btn-primary" value="Register New Client" [disabled]="!rForm.valid || !user_form_is_valid">
现在的问题是......验证工作正常 . 但是当我提交值时,子组件的值不会传递 . 我试过了:
<app-user-registration (userFormIsValid)="emittedUserFormValidStatus($event)" [group]="rForm.controls.user"></app-user-registration>
但它无法编译说this.userFormIsValid.emit不是一个函数 .