Un esempio di validatore da utilizzare con il normale richiedono attributo potrebbe essere qualcosa di simile
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
}
}
attributo Fondamentalmente richiesta sta controllando la prima volta, questo ogni volta dopo che hai usato l'input per la prima volta, anche se rimuovi il file (che era il mio problema) perché il controllo del valore è per null. E quando è intatto è nullo, quindi si riempie quando aggiungi un file, ma se lo rimuovi è solo un array vuoto, quindi []! == null. Spero che questo aiuti a seguire questo puoi costruire il tuo tipo di convalida se necessario.
fonte
2016-08-04 09:03:01
auto-risolto. ** ** html '' ** ** ts 'controlName.updateValue (valore)' (valore è impostato via FileReader) –
hey @Yusu puoi rispondere alla tua stessa domanda e fornire tutto il codice pertinente che ha funzionato per te ... ?? – hhsadiq
@YuSu Puoi davvero fornire tutto il codice pertinente, perché non sono in grado di farlo come dici tu. Se provo con 'this.frm.patchValue ({file: evt.target.value});' Sto ottenendo: Impossibile impostare la proprietà 'value' su 'HTMLInputElement': questo elemento input accetta un nome file, che può solo essere programmaticamente impostato sulla stringa vuota. –