1

ユーザはuib-datepickerカレンダー(https://angular-ui.github.io/bootstrap/)で日付を入力するか、入力することができます。ng-model-optionsの使用updateOn:uib-datepickerポップアップでのぼかし

<input 
    datepicker-append-to-body="calendarCtrl.appendToBody" 
    uib-datepicker-popup="calendarCtrl.dateFormat" 
    ng-model="calendarCtrl.ngModel" 
    ng-click="calendarCtrl.open"/> 

は私がユーザーまで、NG-モデルを更新しないように、ユーザーのためのオプションを許可する必要があります:ユーザーが日付ピッカーがポップアップし、ユーザがここで選択を行うことができるように入力をクリックすると入力され、入力がぼやけています。これを行うために、ng-model-optionsを使用しようとしています。

ng-model-options={updateOn: 'blur'} 

これは、入力にすると、ユーザーのタイプの日付の素晴らしい作品 - ブラーが発生するまでngModelが更新されず、任意の検証はぼかしまで走っていません。問題は、ユーザが開いているカレンダーをクリックして日付を選択したときに何も起こらないという点で、カレンダーポップアップの機能を壊してしまうことです。ユーザーがカレンダーをクリックすると、基本的にぼかしイベントが入力に発生しているので、私は仮定していますか?

誰もこの問題に遭遇しましたか? ng-model-optionsオプションやdatepickerの中にdatepickerから選択することはできますが、入力にぼかしが発生するまでng-modelを更新できないものがありますか?あなたは日付ピッカーでngModelのために一時的なプロパティng-model="calendarCtrl.tempSelectedDate"を使用することができますように

おかげ

答えて

2

が鳴ります。

次に、ngBlurイベント(https://docs.angularjs.org/api/ng/directive/ngBlur)を使用して、実際のプロパティieを更新します。 calendarCtrl.ngModel = calendarCtrl.tempSelectedDateを設定します。

のスコーププロパティを使用しても何も停止しませんが、ng-model="calendarCtrl.dateSelected"などの意味のある名前を使用すると、コードを読みやすくなります。

ここにはデモhttp://plnkr.co/edit/90mDPqzadjPt09Tp4SlI?p=previewがあります。

私は2回の変更で誰か他の人の日付ピッカーのplnkrをフォークと拡張:Blur Date: {{ blurDate }}で値を表示する<input> &にng-blur="blurDate = startDate"を追加します。

+0

私は例を追加しました –

+0

私のケースでは、入力をクリックするたびにng-blurが呼び出されていますが、ポップアップするとカレンダーがぼやけているためです。私のぼかし関数では、ngModelControllerを$ dirtyに設定しています。これにより、エラーの検証が開始されます。私は入力要素のキーダウンを聞き、入力を$ pristineに戻して解決することになった。ユーザーがカレンダーポップアップをクリックするか、または離れてクリックして入力をぼかすと、フォームは$ dirtyに戻され、検証エラーが検索されます。 Hackyソリューションは既存のコードに基づいているが、唯一の選択肢のようだ。 – techer

関連する問題