Я новичок в javascript и angular. Это должно быть простой проблемой, но я не знаю, что не так с моим кодом. Я не знаю, есть ли у меня правильный синтаксис для обработчика времени. Код просто отображает время только один раз.
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-hello-world',
templateUrl: './hello-world.component.html',
styleUrls: ['./hello-world.component.css']
})
export class HelloWorldComponent implements OnInit {
dateMessage: string;
constructor() {
setInterval(this.time_handler, 1000);
//Method 1: This works
// setInterval(()=> {
// let currentDate = new Date();
// this.dateMessage = currentDate.toLocaleTimeString();
// }, 1000);
}
ngOnInit() {
}
// Method 2: This does not work
public time_handler() {
let currentDate = new Date();
this.dateMessage = currentDate.toLocaleTimeString();
}
}



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вам нужно bind это для функции внутри интервала.
constructor() {
setInterval(this.time_handler.bind(this), 1000);
//Method 1: This works
// setInterval(()=> {
// let currentDate = new Date();
// this.dateMessage = currentDate.toLocaleTimeString();
// }, 1000);
}
В противном случае this в методе дескриптора не будет указывать на класс.
Код, который не работает, потому что this внутри setInterval будет указывать на window, а в объекте window нет функции time_handler
setInterval(console.info(this), 3000)Вот почему ваш код не работает
Но ваш прокомментированный код работает, потому что вы используете функцию стрелки, а в функции стрелки это относится к окружающей области.
Когда вы используете bind, который возвращает новую функцию, и она явно связана