我有一个输入,允许用户通过 uib-datepicker 日历 ( https://angular-ui.github.io/bootstrap/ ) 输入或选择日期。当用户单击输入时,会弹出日期选择器,允许用户进行选择这是输入:
<input
datepicker-append-to-body="calendarCtrl.appendToBody"
uib-datepicker-popup="calendarCtrl.dateFormat"
ng-model="calendarCtrl.ngModel"
ng-click="calendarCtrl.open"/>
我需要允许用户选择在用户模糊输入之前不更新 ng-model。为此,我正在尝试使用 ng-model-options。
ng-model-options={updateOn: 'blur'}
当用户在输入中键入日期时,这非常有用 - ngModel 在出现模糊之前不会更新,并且在模糊之前不会运行任何验证。问题在于它破坏了日历弹出窗口的功能,因为当用户随后单击打开的日历以选择日期时,什么也没有发生。我假设是因为当用户点击日历时,输入端实际上发生了一个模糊事件??
有人遇到过这个问题吗?日期选择器中是否有 ng-model-options 选项或其他选项允许用户仍然从日期选择器中进行选择但不会更新 ng-model 直到输入发生模糊?
谢谢
最佳答案
听起来您可以使用临时属性 ng-model="calendarCtrl.tempSelectedDate"
用于日期选择器中的 ngModel。
然后使用 ngBlur 事件(https://docs.angularjs.org/api/ng/directive/ngBlur)更新真实属性,即。设置 calendarCtrl.ngModel = calendarCtrl.tempSelectedDate
.
此外,尽管没有什么能阻止您使用范围属性 calendarCtrl.ngModel
在ngModel
,如果您使用更有意义的名称(例如 ng-model="calendarCtrl.dateSelected"
),代码将更易于阅读.
这是一个工作演示 http://plnkr.co/edit/90mDPqzadjPt09Tp4SlI?p=preview .
我 fork 并扩展了别人的日期选择器 plnkr,有两个变化:添加 ng-blur="blurDate = startDate"
到 <input>
并用 Blur Date: {{ blurDate }}
显示值.
关于javascript - 使用 ng-model-options updateOn :blur with uib-datepicker popup,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40713487/