typescript - Kontrollera om inmatningskontroll har viss typ av validator i angular2
Jag har en komponent som omsluter inmatningsfältet. I komponenten tar jag emot Control-objektet från @Input() inputControl: Control;. I mallen har jag en span som visar ett meddelande om inmatningsfältet i komponenten inte är obligatoriskt.
<span
class="input-label-caption">
(optional)
</span>
och inmatningen
<input
*ngIf="inputMode=='text' || inputMode=='email'"
type="{{inputMode}}"
[ngFormControl]="inputControl"
placeholder="{{placeholder}}"
class="input-text"
[disabled]="inputDisabled"
[ngClass]="{
'inverted': inverted
}">
Hur kan jag läsa från inputControl-objektet om det innehåller Validators.required? Jag vill veta om jag kan använda det så här till exempel
<span
class="input-label-caption"
*ngIf="!inputControl.validators.required"
>
(optional)
</span>
Svar #1
Du kan försöka använda detta uttryck:
<span
class="input-label-caption"
*ngIf="!inputControl.errors?.required"
>
(optional)
</span>
Attributet errors innehåller en post per namn på validatorn som misslyckades.
Jag använder Elvis-operatorerna för errors-attributet eftersom det kan vara odefinierat om det inte finns något valideringsfel.
Redigera
Efter din kommentar tror jag att du kan kontrollera en "required"-validator med ===-operatorn direkt med Validators.required-funktionen. Faktum är att en validator helt enkelt är en funktion och Validators.required-funktionen används för "required"-validering.
Här är den motsvarande koden:
this.hasRequiredValidator = (this.inputControl.validator === Validators.required);
I det fall där validator-attributet är en array, behöver du utöka testet lite för att kontrollera om Validators.required-funktionen finns i arrayen.
Nu skulle koden i mallen vara:
(valfritt)
Hoppas det hjälper dig, Thierry
Svar #2
Jag kunde inte få ovanstående att fungera, vilket inte är förvånande med tanke på ändringarna i Angular sedan januari. Med den senaste versionen av Angular (2.2.0) behöver du något sådant här i din klass.
get required(): boolean {
var _validator: any = this.inputControl.validator && this.inputControl.validator(this.inputControl);
return _validator && _validator.required;
}
Detta kommer också att hantera fallet där du har flera validerare i ett reaktivt formulär, t.ex.
name: ['', [Validators.required, Validators.minLength(2)]]
