#javascript #angular #typescript
#javascript #angular #typescript
Вопрос:
Я написал код для чтения данных из таблицы (в таблице у меня есть кнопка редактирования для редактирования значений записей). Итак, для этого у меня есть код typescript в методе ngOnInit, как показано ниже. Конфигурация считывается таблицей в employee.html .
export class EmployeeComponent implements OnInit {
config = null;
ngOnInit(): void {
this.config = {
events: {
click(event, context) {
alert('name: ' context.getData('nameCol'));
this.doSomething(context.getData('nameCol'))
}
}
}
doSomething(name) { // function declaration
console.log('Param1: ' data);
}
}
При нажатии кнопки редактирования вызывается метод click (событие, контекст), а также выводится предупреждение в браузере с данными, которые я пытаюсь отредактировать. Но я не могу получить доступ к этому методу.doSomething() из метода click (метод doSomething не вызывается). Любая подсказка, как получить доступ к this.doSomething() из метода click.
Комментарии:
1. Возможно, проблема с областью действия
this
попробуйте создать переменную в начале ngOnInit likeconst that=this;
и использовать ее внутри вашей части click какthat.doSomething()
2. TypeScript компилируется в JavaScript к тому времени, когда браузер его видит. Таким образом, нет такой вещи, как вызов метода TypeScript из JavaScript. Ваша проблема в том, что
this
inside ofclick
ссылается наEmployeeComponent.config.events
, а неEmployeeComponent
. @BeshambherChaukhwan имеет на это право с точки зрения кэширования ссылки наEmployeeComponent
экземпляр какthat
(илиme
илиself
или что угодно) и использования этой переменной вместоthis
.3. Спасибо @Beshamberchaukhwan. Это сработало.
4. @PramodS Тогда я дам ответ
Ответ №1:
Проблема с областью действия this
, которая относится к config.events. Вам необходимо сохранить ссылку заранее, создав переменную в начале ngOnInit . Попробуйте следующее:
ngOnInit(): void {
const that = this;
this.config = {
events: {
click(event, context) {
alert('name: ' context.getData('nameCol'));
that.doSomething(context.getData('nameCol'));
}
}
}
Комментарии:
1. @PramodS это отвечает на ваш вопрос?
Ответ №2:
используйте функцию стрелки вместо выражения функции, которое имеет собственное this .
click(prop) { this refers to click }
если вы используете функцию стрелки, например
click: (prop) => { this refers to class instance }
export class EmployeeComponent implements OnInit {
config = null;
ngOnInit(): void {
this.config = {
events: {
click: (event, context) => {
alert('name: ' context.getData('nameCol'));
this.doSomething(context.getData('nameCol'))
}
}
}
doSomething(name) { // function declaration
console.log('Param1: ' data);
}
}