0
所以我有一个自定义的异步验证,像这样:去抖输入发送重复的值
import { Injectable } from '@angular/core';
import { FormControl } from "@angular/forms";
import { DefaultApi } from "../data/api/DefaultApi";
import { Observable } from 'rxjs/Rx';
import 'rxjs/Rx';
@Injectable()
export class ValidationService {
tempURL = "http://localhost/api/v1/validate";
oldVal: any;
constructor(private defaultApi: DefaultApi) {
}
generateValidator(validationType: string) {
return (control: FormControl) => {
return new Observable((obs: any) => {
control
.valueChanges
.debounceTime(400)
.mergeMap(value => {
return this.defaultApi.validationGet(validationType, value)
})
.subscribe(
data => {
obs.next(null);
obs.complete();
},
error => {
obs.next({'validationFailed': true});
obs.complete();
}
);
}).distinctUntilChanged();
}
}
}
的问题是,虽然它是“分组”的按键正确(即有人类型913会发出913没有9 1 3 )它会多次发射它们(913,913,913)。我尝试过移动独特的UnicantChanged,但无济于事。我错过了明显的东西吗?
这摆脱了重复的请求,但它似乎不会增加任何延迟。这是为了验证输入字段,所以我想等到用户在打到服务器之前停止输入一点点。 – fridder
在启动observable之前,您可能需要设置一个超时时间,但去抖动将始终具有与刚刚输出的输出相同的输入(例如某些类型为1-2-3,它将发射3次),其中限制或限制输出。 –