如何使用AngularJS过滤器格式化时间?

时间:2016-06-15 13:22:10

标签: javascript angularjs

我有一个计时器,正在从某个用户设置的值开始倒计时。 他们输入一些被视为分钟的数字。数字* 1000 * 60将其转换为毫秒 - 从那里计数器倒计时并减少此数字。

我想要做的是将此数字格式化为分钟和秒,因此如果输入的数字是3.5,则应显示为03:30。

我尝试过使用Angular提供的日期过滤器,但它与定时器的值不同步。它会减少一次然后停止。

代码:

<h4 class="timer">{{ vm.timer.ticks | date: "mm:ss"}}</h4>

计时器的背景是服务

start(duration) {
  this.ticks = duration;
  this.timer = this.$interval(() => {
    if (this.ticks === 0) return this.stop();
    this.ticks--;
  }, 1000);
}

2 个答案:

答案 0 :(得分:0)

我认为这是因为你正在隐藏&#34;这个&#34;在你的内在功能。尝试将其重写为(未经测试!):

start(duration) {
  var ticks = duration;
  this.timer = this.$interval(() => {
    if (ticks === 0) return this.stop();
    ticks--;
  }, 1000);
}

答案 1 :(得分:0)

好的,所以...当我计算时间时,我犯了一个可怕的错误......

我设置$ scope。$ watch从服务中查看我的变量,并根据我正在改变其他变量。

$scope.$watch('vm.timer.ticks', value => {
  if (value <= 0) {
    vm.timer.count = 0;
    vm.timer.latest = '';
  }
  if(vm.timer.ticks > 0)  {
    seconds = vm.timer.ticks % 60;
    minutes = Math.floor(vm.timer.ticks / 60);
    filledMinutes = minutes < 10 ? "0" + minutes : minutes;
    filledSeconds = seconds < 10 ? "0" + seconds : seconds;
    vm.displayTime = filledMinutes + ':' + filledSeconds;
  } else {
    vm.displayTime = '00:00';
  }
});