2016-01-21 11 views
13

o wartości new Control('', Validators.required) nie działa, nawet jeśli plik jest ważny.Jak mogę sprawdzić <typ wejściowy = "plik"> w Angular2?

(a właściwie to trudno było zweryfikować przyciski radiowe, jak również ...)

+1

samodzielnie rozwiązany. ** ** 'html ' ** ts ** 'controlName.updateValue (wartość)' (wartość jest ustawiona przez FileReader) –

+0

hej @ Yusu możesz odpowiedzieć na własne pytanie i podać cały odpowiedni kod, który pracował dla Ciebie ...? – hhsadiq

+0

@YuSu Czy rzeczywiście proszę podać cały odpowiedni kod, ponieważ nie mogę tego zrobić zgodnie z informacją. Jeśli spróbuję z 'this.frm.patchValue ({file: evt.target.value});' otrzymuję: Nie powiodło się ustawienie właściwości 'value' na 'HTMLInputElement': Ten element wejściowy akceptuje nazwę pliku, która może tylko programowo ustawić na pusty ciąg znaków. –

Odpowiedz

5

Validators.required zależy od wartości pola.

Typ wejścia file nie ma wartości, dlatego jest uważany za undefined lub null.

Dlatego jest nieważny. Lepiej napisz własną walidację.

Dla niestandardowego pliku validation example refer

0

Jeden doskonałe rozwiązanie do rozwiązania tego problemu jest stworzenie elementu niestandardowego który owinąć i wdraża ValueAccessor. W ten sposób możesz utworzyć niestandardowy komponent, który działa dokładnie tak, jak elementy innych formularzy. Zamiast korzystać z wartości wejściowej, możesz użyć innej zmiennej wewnątrz swojego komponentu.

Więcej informacji tutaj: Applying angular2 form directives to custom input form elements

1

Przykładem walidator korzystać z normalnej wymagają atrybutu może być coś takiego

import { Provider, forwardRef, Directive } from '@angular/core'; 
import { NG_VALIDATORS, Validator, Control } from '@angular/common'; 
export const NO_ATTACHMENT_VALIDATOR = new Provider(NG_VALIDATORS,{ 
    useExisting: forwardRef(() => noAttachmentValidator), 
    multi: true 
}); 

@Directive({ 
    selector: '[noAttachmentValidator][ngControl],[noAttachmentValidator][ngFormControl],[noAttachmentValidator][ngModel]', 
    providers: [NO_ATTACHMENT_VALIDATOR] 
}) 

export class noAttachmentValidator implements Validator{ 
    public validate(control: Control) : { required: { [key: string]: boolean } | null } { 
    let state, 
     value = control.value, 
     alreadyUsed = control.dirty; 

    if(alreadyUsed && value.length == 0){ 
     state = true; 
    } 
    return state ? { required : { 'required' : false } } : null 
    } 
} 

Zasadniczo wymaganym atrybutem jest sprawdzenie za pierwszym razem, to za każdym razem po tym użyłeś danych wejściowych po raz pierwszy, nawet jeśli usuniesz plik (to był mój problem), ponieważ kontrola wartości ma wartość NULL. A gdy jest nietknięta, jest zerowa, to staje się zapełniona, gdy dodajesz plik, ale jeśli go usuniesz, to po prostu pusta tablica, więc []! == null. Mam nadzieję, że pomoże ci to w tym, abyś mógł zbudować własny rodzaj weryfikacji, jeśli potrzebujesz.

Powiązane problemy