Отслеживание ответа пользователя 184994 ...
Значение this
не сохраняется в ваших двух прослушивателях событий.
Отредактируйте вашу функцию, чтобы использовать Синтаксис стрелки ES6 , и this.whatever
обновится, как ожидается.
ctx.canvas.addEventListener('click', (event) => {
var mouseX = event.clientX - ctx.canvas.offsetLeft;
var mouseY = event.clientY - ctx.canvas.offsetTop;
console.log('Mouse Click At:', mouseX + ' | ' + mouseY);
connsole.log(this); // `this` is now equal to an instance of ActivityDesignerComponent
this.whatever = mouseX;
});
В качестве альтернативы, вы можете вообще отказаться от использования анонимных функций,Переместив свою логику в метод ActivityDesignerComponent, вы также можете сохранить значение this
, используя метод связывания .
updateMousePos(): void {
const mouseX = event.clientX - ctx.canvas.offsetLeft;
const mouseY = event.clientY - ctx.canvas.offsetTop;
console.log('Mouse Click At:', mouseX + ' | ' + mouseY);
connsole.log(this); // `this` is still equal to an instance of ActivityDesignerComponent
this.whatever = mouseX;
}
....
ctx.canvas.addEventListener('click', this.updateMousePos.bind(this);
Рабочий пример для StackBlitz.
Стоит добавить, что это поведение не является уникальным для Angular или даже TypeScript.Вот как работает JavaScript.