【发布时间】:2023-03-16 20:35:01
【问题描述】:
我正在尝试创建自定义验证器,它需要点击两个端点来获取所需的数据,然后比较数据的属性,如果它们不相等,那么我想抛出一个错误。这是验证器。
checkIfSalaIsFull(control: AbstractControl): {[salaIsFull: string] : boolean}{
if(control.value !=null){
this.salaService.findActiveCards(control.value).subscribe(karty=>{
this.salaService.findSalaByNRSali(control.value).subscribe(sala =>{
if(karty.length === sala.pojemnosc){
console.log(karty.length);
console.log(sala.pojemnosc);
return {'salaIsFull' : true};
}
});
});
}
return null;
}
问题是即使 console.log 为显示的属性显示相同的值,也不会引发错误。
<div class="form-group">
<label for="nr_sali">Numer sali</label>
<select class="form-control" id="nr_sali" formControlName="nr_sali">
<option *ngFor="let sala of sale" [value]="sala.nr_sali" >{{sala.nr_sali}} - {{sala.oddzial}}</option>
</select>
<span *ngIf="formAddKarta.get('nr_sali').errors?.salaIsFull"
class="help-block text-danger">
Sala jest pełna
</span>
</div>
我的后端工作正常,我用邮递员检查了它。
这也是我正在使用的 FormGroup 的设置:
this.formAddKarta = new FormGroup({
data_przyjecia: new FormControl(null, [KartyListaComponent.checkIfDateIsLessThanToday.bind(this),
Validators.required]),
godzina_przyjecia: new FormControl(null,[Validators.required]),
data_wypisu: new FormControl(null),
nr_sali: new FormControl(null, [Validators.required,this.checkIfSalaIsFull.bind(this)]),
pesel: new FormControl(this.pesel)
});
我在 nr_sali FormControl 的 Validators 表中设置了这个自定义验证器。
编辑:
我尝试使用地图而不是订阅,但是它没有发送检索sala的请求,只发送检索karty的请求。
checkIfSalaIsFull(control: AbstractControl): {[salaIsFull: string] : boolean}{
if(control.value !=null){
this.salaService.findActiveCards(control.value).subscribe(karty=>{
this.salaService.findSalaByNRSali(control.value).pipe(map(sala =>{
if(karty.length === sala.pojemnosc){
console.log(karty.length);
console.log(sala.pojemnosc);
return {'salaIsFull' : true};
}else{
return null;
}
}));
});
}else{
return null;
}
}
【问题讨论】:
-
您需要使用 map 而不是 subscribe 并返回映射后的 observable。您还需要将其设置为异步验证器
-
我是 Angular 的新手,你能举例说明如何做到这一点吗?老实说,我不知道如何使用地图。 @AluanHaddad
-
你可以在这里找到关于地图的信息:angular.io/guide/rx-library#operators 基本上你想使用
.map(sala=>而不是subscribe(sala=> -
@Rinktacular,当我使用 .map(sala=> 时收到错误消息“‘Observable
’类型上不存在属性‘地图’” -
确保在文件顶部使用这个:
import { map } from 'rxjs/operators'
标签: angular rxjs angular-forms