gpt4 book ai didi

Angular2 用户名或电子邮件采用异步验证

转载 作者:太空狗 更新时间:2023-10-29 17:48:37 24 4
gpt4 key购买 nike

我需要使用 github api 实现异步验证。我希望你能帮助我。

        export class UsernameValidator {   
static usernameTaken(control: FormControl): Promise<ValidationResult> {
return new Promise((resolve, reject) => {
setTimeout(() => {
//How Can i use github Api like this:
// if (control.value === "this._http.get('http://api.github.com/users/'+this.username)")) {
if (control.value === "David") {
console.log('username taken')
resolve({"usernameTaken": true})
} else {

resolve(null);
};
}, 1000);
});

}
}

谢谢。

最佳答案

这是在响应式表单中实现的,但应该可以修改为表单驱动方法的解决方案。

验证器通过 API 获得执行实际获取的服务(如果给定用户不存在,则返回 404):

export function usernameTaken(httpService: HttpService) {
return control => new Promise((resolve, reject) => {
console.log("in validator");
//How Can i use github Api like this:
httpService.lookupUser(control.value).subscribe(data => {
console.log(data);
if(data.id) {
resolve({ usernameTaken : true})
} else {
resolve(null);
}
}, (err) => {
console.log("in error"+ err);
if(err !== "404 - Not Found") {
resolve({ usernameTaken : true});
} else {
resolve(null);
}
});
});
}

服务本身看起来像这样:

 @Injectable()
export class HttpService {
constructor(private http: Http) {}

lookupUser(username: string): Observable<any> {
return this.http.get("https://api.github.com/users/" + username)
.map(this.extractData)
.catch(this.handleError) as Observable<any>;
};
<...>
}

然后我们注入(inject)服务并像这样应用验证器(数组中的第三个位置是 asyncValidators:

constructor(private fb: FormBuilder, private httpService: HttpService) {
this.name = 'Angular2',
this.form = this.fb.group({
username: ['', Validators.required, usernameTaken(this.httpService)]
});

实际输入看起来很正常:

<input type="text" placeholder="Username" formControlName="username"/>

这是一个演示异步验证器用法的 Plunker:http://plnkr.co/edit/19lp0E9x6L4kPyX0ORg0?p=preview

关于Angular2 用户名或电子邮件采用异步验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40488737/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com