我试图实现从Im检查数据库中是否存在给定的电子邮件,我的目标是检测输入字段中的密钥更改,并在固定延迟执行请求到db之后,努力执行请求,因为我对角度和反应性的。
代码:
checkIfExists(email: string){
this.emailToSearch.next(email);
}
emailExists: Observable<boolean>;
private emailToSearch = new Subject<string>();
private user = new RegistrationUser(null, null, null, null, null);
ngOnInit(): void {
this.emailExists = this.emailToSearch
.debounceTime(500)
.distinctUntilChanged()
.switchMap(
email => this.registrationService.exists(email));
}
<input type="text" class="form-control" name="email" (keyup)="checkIfExists(email.value)" #email="ngModel" required [(ngModel)]="user.email">
答案 0 :(得分:1)
到目前为止,您的代码似乎还可以。您唯一缺少的是通过调用 ngOnInit(): void {
this.emailExists = this.emailToSearch
.debounceTime(500)
.distinctUntilChanged()
.switchMap(
email => this.registrationService.exists(email))
.subscribe((result) => doSomething(result));
}
方法实际调用订阅:
Observable
有一件事你必须要小心。在您的情况下,如果由于某种原因,您从this.registrationService.exists
收到的 ngOnInit(): void {
this.emailExists = this.emailToSearch
.debounceTime(500)
.distinctUntilChanged()
.switchMap(
email => this.registrationService.exists(email).catch(() => Observable.empty()))
.subscribe((result) => doSomething(result));
}
错误,您的搜索将会中断。确保通过执行以下操作来捕获此信息:
.first {
display: flex;
align-items: center;
}
空的observable将允许您的订阅保持活动状态。