javascript - 使用 ng-model-options updateOn :blur with uib-datepicker popup

标签 javascript angularjs twitter-bootstrap datepicker angular-ui-bootstrap

我有一个输入,允许用户通过 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.ngModelngModel ,如果您使用更有意义的名称(例如 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/

相关文章:

javascript - 具有精确模式的单词的正则表达式

Javascript 无法在 Firefox v8 - v11 中正确加载图像

jquery - Bootstrap 4 |单击时翻转卡片()

html - 为什么单击图标时导航栏不会折叠/展开?

PHP JSON 返回两个不同函数的一个响应

javascript - 我的 Javascript 程序失去逻辑

javascript - 即使使用单引号,ng-include 也不起作用

javascript - Angular ckeditor 额外插件给出错误

javascript - 抛出自定义错误时触发 $stateChangeError

html - Bootstrap 将一张图片放在另一张图片上?