2016-01-21 4 views
13

ngControlの値がnew Control('', Validators.required)のファイルが有効であっても機能しませんでした。Angular2で<input type = "file">を検証するにはどうすればよいですか?

(そして実際に、私はそれが難しいだけでなく、ラジオボタンを検証することが判明...)

+1

自己解決型。 ** HTML ** 'の' ** TS ** 'controlName.updateValue(値)'(値が設定されていますvia FileReader) –

+0

ちょっと@Yusuあなた自身の質問に答えることができ、あなたのために働いた関連するコードをすべて提供できますか? – hhsadiq

+0

@YuSu実際にすべての関連コードを提供してください、あなたが言うように私はそれを行うことはできません。 'this.frm.patchValue({file:evt.target.value});で試してみると、 '取得しています:' HTMLInputElement 'の' value 'プロパティを設定できませんでした:この入力要素はファイル名を受け取ります。プログラムで空の文字列にのみ設定できます。 –

答えて

5

Validators.requiredは、フィールドの値に依存します。

入力タイプfileしたがってundefined又はnullと考えられる、値を持ちません。

これが無効な理由です。あなた自身が検証を書いたほうがいいです。この問題を解決するためのカスタムファイルの場合

validation example refer

0

一つの偉大な解決策は、あなたとValueAccessorを実装をラップするカスタム要素を作成することです。この方法で、他のフォームの要素とまったく同じように動作するカスタムコンポーネントを作成できます。入力値を使用する代わりに、コンポーネント内で別の変数を使用できます。ここ

詳細情報:Applying angular2 form directives to custom input form elements

1

ノーマルで使用するバリデータの例は、属性は、このことの後に毎回、基本的に必要な属性は、最初の時間をチェックして、この

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です。ファイルを追加するといっぱいになりますが、削除すると空の配列になります。 []!== null。私はこれがあなたが必要な場合にあなた自身のタイプのバリデーションを構築できることに従うことを望みます。

関連する問題