【问题标题】:AngularJS Material ng-input-container resets timeAngularJS Material ng-input-container 重置时间
【发布时间】:2021-02-19 07:35:34
【问题描述】:

我的目标是建立一个日期和时间模型。

不幸的是,我还没有为 AngularJS Material 找到稳定的日期时间选择器组件,所以我使用了两个共享相同模型的元素:标准 md-datepicker 和常规 input type="time"

      <md-input-container>
        <md-datepicker ng-model="ctrl.myDateTime" md-placeholder="Enter date"></md-datepicker>
      </md-input-container>
      <md-input-container>
        <input ng-model="ctrl.myDateTime" type="time">
      </md-input-container>

      <span>Date and time chosen: {{ctrl.myDateTime}}</span>

首先,我选择日期。选择日期后,ctrl.myDateTime 将获取日期值,其中00:00:00 时间(在浏览器时区中)显示在span 中。 然后我选择时间。设置时间后,span 中也会正确显示。

这里的问题:每次input type="time" 失去焦点(如onblur),由于某种原因,时间分数被重置为00:00:00,但input 继续显示用户的值。

这就是我需要帮助的地方。 我唯一想到的是,如果input 没有被md-input-container 包裹,那么时间只会重置一次,如果我再次更改它,焦点丢失不会重置时间。

如何避免?

要重现的代码示例: https://codepen.io/mih-kopylov/pen/KKMxgBK

【问题讨论】:

  • 我试过你的链接。似乎可以正常工作。也许我误解了你的问题。设置日期有效。设定时间有效。使用移动浏览器 Safari。可能是浏览器问题?
  • @tbone849 这很奇怪。我再次打开链接并重现了该错误。我正在使用 Chrome 桌面(最新)。这是录制视频的链接(直播到 2020 年 11 月 30 日)yadi.sk/i/JAP1f93pTBbWrg
  • 我也在 Android 上的 Chrome 和 Firefox 桌面上做了​​同样的事情。同样的事情被复制。一旦时间输入失去焦点,问题就会重现。
  • 我现在看到了这个问题。这很奇怪。

标签: angularjs datetime angularjs-material


【解决方案1】:

通过将类型从 time 更改为 datetime,您可以避免这种情况。
如果您只想拥有time,则需要一个额外的变量。

<md-content ng-controller="AppCtrl as ctrl" layout-padding="" ng-cloak="" class="datepickerdemoBasicUsage" ng-app="MyApp">
  <div layout="column">
    <div flex="">
      <md-input-container>
        <md-datepicker ng-model="ctrl.myDateTime" md-placeholder="Enter date"></md-datepicker>
      </md-input-container>
      <md-input-container>
<!-- when time is changed using input inside md-input-container, time is resetted on blur -->
        <input ng-model="ctrl.myDateTime" type="datetime">
      </md-input-container>
<!-- when time is changed using this input, time is resetted but only once -->
      <input ng-model="ctrl.myDateTime" type="datetime">
    </div>
    <span>Date and time chosen: {{ctrl.myDateTime}}</span>
  </div>
</md-content>

如果您选择将日期和时间分开,您可以使用以下函数:

myDate.setTime(myTime.getTime());

【讨论】:

  • 这不是它在几个版本的 Angular Material 之前的工作方式。我已经更新了版本,并遇到了这个问题。而且我不需要日期时间,因为我想利用材料日期选择器组件来获取日期。所以我想找出它停止工作的原因,并弄清楚我是否可以在使用另一个组件之前修复它
猜你喜欢
  • 2016-08-27
  • 2015-05-09
  • 1970-01-01
  • 2018-09-29
  • 2016-12-10
  • 2018-02-09
  • 2017-05-18
  • 2018-12-05
  • 2017-05-03
相关资源
最近更新 更多