繁体   English   中英

在angularJs指令中使用Bootstrap datetimepicker

[英]Using Bootstrap datetimepicker in angularJs directive

我们有一个复杂的angularJs指令,它使用此datetimepicker https://eonasdan.github.io/bootstrap-datetimepicker/ContributorsGuide/#private-functions 该指令适用于许多情况。 我们仅将其用作日期选择器,仅时间选择器和日期时间选择器。 在后一种情况下,存在问题。 如果我们已经设置了一个值(带有时间,例如00:00),并且从日历中选择了日期(但没有选择时间),则时间将重置为当前时间。 我们希望在这种情况下节省时间。 我的同事实现了以下代码:

  const shouldSaveTime = val !== this.model && !this.changeTimeWithDate && this.hasInitialValueChanged && this.pickTime && this.model; if (shouldSaveTime) { val = services.Date.setTime(val + "", this.model + "").format(this.FORMAT); } 

但是,我发现这导致无法手动调整时间以及无法使用控件的时间选择器部分。 因此,我注释掉了这段代码,并得到了正确的时间行为,除了现在的选择日期仅将时间部分更新为当前时间。 是否有办法找出何时只有日期的部分控件通过选择器进行更新(而不是手动键入)?

我相信我已经解决了问题,尽管我不太喜欢这种解决方案。 我在指令中将新属性添加到dp.change事件处理程序中。 然后,我添加了以下代码:

 let preserveSelectedTime = false; if (this.pickTime && !this.changeTimeWithDate) { if (this.dateChangedByPicker) { if (val && modelValue) { //let newDate = Date.parse(val); //let originalDate = Date.parse(modelValue); let newDate = new Date(new Date(val).toDateString()); let originalDate = new Date(new Date(modelValue).toDateString()); if (newDate.valueOf() !== originalDate.valueOf()) { // New date was selected and may be a time preserveSelectedTime = true; } } } } if (preserveSelectedTime) { val = services.Date.setTime(val, modelValue).format(this.FORMAT); } this.setVariable('model', val); this.dateChangedByPicker = false; // Reset this property 

在我有限的测试中,这似乎可以正常工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM