私はui-bootstrapのdatepicker入力をAngularJSで使用しています。これはngModelとngBlurイベントに結合validatioon方法がありますngModelがngBlurの後に更新されました
<input id="startDate" type="text" ng-model="myCtrl.startDate" ng-blur="myCtrl.validateDate()"/>
必要に応じて、検証方法は、コントローラ内のルールのセット、およびアラートに応じngModelをチェックします。コントローラの関連部分を次に示します。
var vm = this;
vm.startDate = new Date();
vm.minStartDate = new Date(2000,1,1);
vm.validateDate = function(){
if(vm.startDate < vm.minStartDate)
alert("Start date can't be earliar than 2000");
}
問題は、検証メソッドがモデルの更新前に実行されることです。シナリオの例は次のとおりです。
ルール:startDateは、より前にすることはできません。 ページが読み込まれると、startDateの値は当初今日に設定されます。ユーザーは、カレンダーから31.12.1999を選択すると、ngBlurメソッドが呼び出されます。ただし、ngModelはまだ更新されていません。したがって、検証によって今日の価値がチェックされ、okと表示されます。実際には、ngModelの値を31.12.1999にチェックしてください。値は入力ビューで同時に変更されますが、背景では、ぼかしメソッドが起動された後に設定されます。私の知る限り、AngularJSの双方向バインディングは通常この目的のために機能しますが、ngBlurは例外でなければなりません。
私は多くのことを試しました。
成分にNG-モデルオプションの追加:
ng-model-options="{ updateOn: 'blur' }"
が前後リンクを使用NG変化代わりNG-ボケを使用して入力要素
- を変更することによって
しかし、上記のいずれも動作せず、ng-blurはまだ実行されていません。モデルが更新されます。