ngControl
即使文件有效也无效。
(实际上,我发现很难验证单选按钮......)
答案 0 :(得分:5)
Validators.required
取决于该字段的值。
输入类型file
没有值,因此被视为undefined
或null
。
这就是无效的原因。最好写下你自己的验证。
对于自定义文件validation example refer
答案 1 :(得分:1)
与普通require属性一起使用的验证器示例可能是这样的
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。我希望这有助于遵循这一点,如果需要,您可以构建自己的验证类型。
答案 2 :(得分:0)
解决此问题的一个很好的解决方案是创建一个自定义元素,用于包装和实现ValueAccessor。这样,您就可以创建一个与其他表单元素完全相同的自定义组件。您可以在组件内使用另一个变量,而不是使用输入值。
此处提供更多信息:Applying angular2 form directives to custom input form elements