ngControl
值爲new Control('', Validators.required)
即使在文件有效時也不起作用。如何使用Angular2驗證<input type =「file」>?
(實際上,我發現它難以驗證單選按鈕,以及...)
ngControl
值爲new Control('', Validators.required)
即使在文件有效時也不起作用。如何使用Angular2驗證<input type =「file」>?
(實際上,我發現它難以驗證單選按鈕,以及...)
Validators.required
取決於該字段的值。
輸入類型file
不具有值,因此被認爲是undefined
或null
。
這就是爲什麼它是無效的。最好寫你自己的驗證。要解決此問題
對於自定義文件validation example refer
一個很好的解決方案是創建您的包裹並實現ValueAccessor一個自定義元素。這樣您就可以創建一個與其他表單的元素完全相同的自定義組件。您可以使用組件內的其他變量來代替使用輸入值。
點擊此處瞭解詳情:Applying angular2 form directives to custom input form elements
驗證的例子與正常使用要求屬性可以是這樣的
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
}
}
基本上需要屬性檢查一次,每次都是這樣之後即使您刪除了文件(這是我的問題),因此您第一次使用了輸入,導致對該值的控制爲null。當它沒有被觸動時它是空的,那麼當你添加一個文件時它會被填充,但是如果你刪除它,它只是一個空數組,所以 []!== null。我希望這有助於遵循這一點,如果需要,您可以構建自己的驗證類型。
自我解決。 ** ** HTML' ' ** ** TS' controlName.updateValue(值)'(值設置通過FileReader) –
嗨@Yusu你能回答你自己的問題,並提供所有相關的代碼,爲你工作......? – hhsadiq
@YuSu你真的可以請提供所有相關的代碼,因爲我不能像你說的那樣去做。如果我嘗試使用'this.frm.patchValue({file:evt.target.value});'我得到:未能在'HTMLInputElement'上設置'value'屬性:這個input元素接受一個文件名,只能以編程方式設置爲空字符串。 –