Поскольку у вас есть несколько раз, вам нужно несколько счетчиков.
Прежде чем показать, как использовать несколько счетчиков, я предлагаю вам использовать объект Date и [DatePipe] из Angular для отображения часов: минут: секунд
time=new Date(2000,1,1,0,0,0,0);
{{time | date:'HH:mm:ss'}}
Итак, вам нужно, чтобы у ваших элементов было два свойства: isRunning и time.
Ваша функция add () становится
add()
{
this.items.forEach((item:any)=>{ //for each item
if (item.isRunning) //if is running
{
console.log(item.time)
item.time=new Date(item.time.getTime()+1000);
}
})
}
И ваши startTask и EndTask должны учитывать, еслиуже работает один счетчик
startTask (item) {
item.time=new Date(2000,1,1,0,0,0,0); //initiazlize the date
if (this.items.find((x:any)=>x.isRunning)) //if some is running
item.isRunning=true; //Simply push item.running=true
else
{
item.isRunning=true;
this.timer() //begin the timer too
}
}
EndTask (item) {
item.isRunning=false;
if (!this.items.find((x:any)=>x.isRunning)) //if nobody is running
clearTimeout(this.t);
}
Для таймера вы используете setInterval, мы должны использовать таймер Rxjs для управления отпиской (TODO)
timer() {
this.t = setInterval(() => {
this.add()
}, 1000);
}