Это ошибка жизненного цикла, говоря, что Angular уже проверил значение, но вы по какой-то причине обновляете его.
Если вы добавите консольный журнал в свою функцию, вы увидите, что он называется A LOT времени.
Это потому, что функции, связанные с директивами, вызываются при каждом взаимодействии с пользователем.
Это означает, что каждый раз, когда он вызывается, он получает новое значение даты (+1 мс)
Чтобы избежать этого, создайте свою дату при создании компонента и сравните ее.При желании вы можете обновить его некоторое время, но не в самой функции.
constructor(private now = new Date()) {}
getTimeDiff(time, date)
{
const slotDate = new Date(`${date} ${time}`); // say time = '10:30:00' and date = '2018-11-14'
const diff = Math.abs(Math.abs(this.now.getTime() - slotDate.getTime()) / 3600000)
//if diff is not negative
if(diff) {
return false
}
else {
return true
}
}
РЕДАКТИРОВАТЬ
Чтобы избежать вызова вашей функции, вы можете использовать переменную, которая обновляется при изменении:
this.timeDiff: boolean;
ngDoCheck() {
this.timeDiff(this.result.endtime, this.result.date);
}
getTimeDiff(time, date)
{
const slotDate = new Date(`${date} ${time}`); // say time = '10:30:00' and date = '2018-11-14'
const diff = Math.abs(Math.abs(this.now.getTime() - slotDate.getTime()) / 3600000)
//if diff is not negative
if(diff) {
this.timeDiff = false;
}
else {
this.timeDiff = true;
}
}
В вашем HTML
<span *ngIf="timeDiff"> open </span>
ngDoCheck
- это ловушка жизненного цикла (например, ngOnInit
), которую можно суммировать с помощью
Функция, которая обнаруживает изменения, которые не отслеживаются Angular