2017-05-11 5 views
5

フォームで使用するカスタムコンポーネントを開発しています。私はControlValueAccessorインターフェイスを実装しており、うまく動作します。角型のカスタムコンポーネントに事前定義バリデータを追加

requiredバリデータ(これはCAPTCHA)なしで使用する理由はないので、コンポーネントのすべての呼び出しでrequiredバリデータを指定する必要があります。

このバリデーターは私のコンポーネントに直接埋め込むことができますか?ngModelとフォーム(テンプレートベースのものと反応性のものの両方)で使用すると、常にこのバリデーターに適用されますか?


明確化。例を考える:

<my-captcha [(ngModel)]="firstCaptcha" required></my-captcha> 

<my-captcha [(ngModel)]="secondCaptcha" required></my-captcha> 

<my-captcha [(ngModel)]="thirdCaptcha" required></my-captcha> 

上記MyCaptcha成分の全ての呼び出しは、フォームコントロールに適用される必要バリためにrequired属性を使用する必要があります。

required属性を明示的に指定せずにカスタムコントローラを呼び出すことはできますが、それにもかかわらずバリデータが適用されていますか?このように:

<my-captcha [(ngModel)]="captchaValue"></my-captcha> 
+0

申し訳ありませんが、少し焦点が合っていませんが、*必要なバリデーター*とはどういう意味ですか?あなたは 'required'属性を意味しますか? – SrAxi

+0

はい、コンポーネントの値を提供する必要があります。それ以外の場合は無効と見なされます。 Angularはこれをテンプレートベースのフォームで 'required'属性で解決します。 –

+0

私は現在同様の状況にあります。反応性のあるフォームを使用することは選択肢ですか? これまで助けてくれたものは反応性のあるフォームで完了しました – Arikael

答えて

0

コンポーネントのすべての呼び出しが必要 バリ

これを指定する必要があります、それを使用してabstract classextendのアイデアを引き起こしました。フォームを持つことになり、あなたが実際にあなたのコンポーネントを作成

export abstract class FormValidationClass implements ControlValueAccessor { 
    // Implement your validation methods for your standard form including required validator 

    protected formModel:<any>;   

    protected constructor() { 
    } 

    public requiredValidatorMethod() { 
     // Do stuff here with formModel, for example 
    } 
} 

そして、::

ので、への道は、すべてのフォームコンポーネントからrequiredバリデータはこのようなものになる可能性がを埋め込む

export class UserFilter extends FormValidationClass implements OnInit { 

     protected formModel:<any>; 

     this.requiredValidatorMethod (this.formModel); 
} 

だから、限り、あなたのクラスは、あなたが012以内の方法を使用することができるようになりますextends FormValidationClassprotected formModelを宣言してを使用し、フォームを持つ各コンポーネントごとに特定のロジックを追加する必要はありません。フォームが含まれているすべてのコンポーネントにロジックをの埋込みの私の方法だろう

が、この場合には、検証する必要があるフォームを含むすべてのコンポーネントにrequiredバリデータを埋め込みます。

希望するか、それとも少なくとも有用ですか?それがどうなるか教えてください!

乾杯!

+0

時間をかけて答えを書こうとしてくれてありがとう、しかし、私はあなたが私の質問を誤解していると思います。私はそれを少し明確にした。私は、別のコンポーネントを定義するためにコンポーネントを再利用することではなく、呼び出しにではなく、コンポーネント自体にバリデータを追加することについて話しています。そして、呼び出すことによって、私はそれがテンプレートでの一回の使用であることを意味します。 –

+0

そう、私は理解したと思う。これを見てみましょう:https://angular.io/docs/ts/latest/cookbook/form-validation.html#!#component-templateコードで検証を行い、 'required'属性は必要ありません*(彼はそれを保持しますスタイリング目的で)*。 – SrAxi

+1

あなたのリンクに関しては、カスタムコンポーネント内にバリデータをカプセル化していないので、テンプレートベースのフォームの 'required'属性から反応的なフォームの' Validators.required'シンボルに移動します。しかし、彼らはまだそれを参照する必要があります。 –

関連する問題