Если вы довольны rxjs,
import { timer } from 'rxjs';
import { tap } from 'rxjs/operators';
ngOnInit() {
timer(0, 3000)
.pipe(
tap(v => {
this.currentItem = this.items[v%3]
})
)
.subscribe(console.log);
}
меньше кода, нет цикла, не требуется сложная логика:)
Вы можете сделать еще лучше с
export class MessagesComponent implements OnInit {
private timer$ = timer(0, 3000);
ngOnInit() {
// for loop can be completely removed
}
}
и в html, используйте
{{ items[(timer$ | async) % 3] }}
, чтобы буквально просто использовать 1 строку кода, чтобы сделать то же самое, используя асинхронный канал и rxjs, и забыть об уродливом цикле for.
демо https://stackblitz.com/edit/angular-m5prrk?file=src%2Fapp%2Fapp.component.ts