【发布时间】:2018-12-01 14:09:23
【问题描述】:
我正在尝试通过异步验证器说明用户名是否可用来验证用户名,我尝试了很多解决方案,但我不知道如何完成这项工作,我有这个错误:
Error: Expected validator to return Promise or Observable.
我的方法 validateUsername() 不完整,我怎样才能让它工作?
register.component.ts
this.registerForm = this.fb.group({
username: ['', [Validators.required], this.validateUsername.bind(this)],
email: ['', [Validators.required,
Validators.pattern('[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,3}$')]],
password: this.fb.group({
pwd: ['', [Validators.required, Validators.minLength(1)]], // todo
confirmpwd: ['', [Validators.required, Validators.minLength(1)]]// todo
}, {
validator: this.mustMatch('pwd', 'confirmpwd'),
}),
birthday: ['', Validators.required]
});
}
validateUsername(control: AbstractControl) {
this.userservice.checkUserExist(control.value).subscribe(
res => {
this.exist = 'username available ';
},
error => {
this.exist = 'username unavailable ';
}
);
}
register.component.html
<div class="form-group">
<label for="inputName" class="font-weight-bold">Usuario</label>
<div class="input-group Name">
<div class="input-group-prepend">
<div class="input-group-text"><i class="fa fa-user" aria-hidden="true"></i>
</div>
</div>
<input type="text" class="form-control" id="inputName" name="inputName" formControlName="username"
placeholder="Identificador de usuario">
</div>
<div *ngIf="username.invalid && username.touched" class="col-4 p-0 ml-5 text-danger">
<p *ngIf="username.errors?.required">
Escoger un nombre de usuario
</p>
<p *ngIf="username.errors?.usertaken">
Este usuario ya existe
</p>
</div>
</div>
【问题讨论】:
标签: angular asynchronous rxjs angular-reactive-forms