2017-05-07 22 views
3

Angular2プロジェクトのリアクティブフォームでng-bootstrapのngbDatepickerを使用しています。日付はオプションですが、ngbDatepickerは常にフォームをInvalid日付が選択されます。ngbDatepickerをマークする方法値が選択されていない場合でもフォームに有効

ngbDatepickerをフォームの検証から除外する方法、または値が設定されているかどうかをValidに戻すように設定する方法はありますか?

+2

それは正常に動作するはずです、私たちも、このユースケースをカバーするテストを得た:https://github.com/ng-bootstrap/ng-bootstrap/blob /02bbc8134d8dc47deea892a819d70bd65e18c13f/src/datepicker/datepicker-input.spec.ts#L204-L211 空の文字列ではなく、 'null' /' undefined'モデルが得られましたか?それでも問題が解決しない場合は、最小限の再現シナリオで問題を開いてください。 –

+0

それは問題でした - ありがとう!空の文字列でモデルの値を初期化していました。ヌルで日付フィールドを初期化することで問題は解決しました。 –

答えて

1

問題はフォームの値をどのように初期化していたかにあります。空の文字列にデフォルト値を設定して、日付をnullに初期化する必要がありました。だから私はこれをやっていた:私はこれをやっている必要があります場合は

replicantForm = this.fb.group({ 
     name: ['', Validators.required], 
     incepdate: '', 
     longevity: '' 
    }) 

replicantForm = this.fb.group({ 
     name: ['', Validators.required], 
     incepdate: null, 
     longevity: '' 
    }) 

感謝を@にpkozlowski - オープンソースを明確化するために。

+0

私の場合、これは初期化時にのみ機能します。 'NgbDateParserFormatter'を使って値を変更すると、' null'になってもフォームコントロールは無効になります。 – Dormouse

1

受け入れられた回答とその後の更新でうまくいかないという事実に対応して、私は次のハックを使用して、コントロールが有効でないか無効な日付が挿入されていることを確認しました。

あなたが私に尋ねるとバリデータの値を変更するのは面倒ですが、ngb-datepickerが内部的に値を設定するまでは完了です。所望の制御上の

カスタムバリデータ:

validateOptionalDate(control: AbstractControl) { 
    if (!(control.value instanceof Object) && control.value !== null) { 
    control.patchValue(null, { 
     onlySelf: true, 
     emitEvent: false, 
     emitModelToViewChange: true, 
     emitViewToModelChange: false 
    }); 
    } 
} 
関連する問題