Не удается прочитать свойство ‘input’ неопределенного

#javascript #angular #error-handling #undefined

#javascript #угловой #обработка ошибок #не определено

Вопрос:

У меня есть функция, которая получает ввод пользователя. Внутри этой функции находится функция обратного вызова, которая проверяет ввод пользователя. При вызове функции обратного вызова я получаю сообщение об ошибке, Ошибка ERROR: не удается прочитать свойство ‘input’ неопределенного.

HTML

 <input id="answer" type="number" (input)= "getInput($event, checkAnswer)" >
 

JS

 input = null;
answer = null;


getInput(event, chkAns){

this.input = Number(event.target.value);

chkAns();

console.log("Input :"   " "   this.input);

 }

 checkAnswer(){

  if(this.input === this.answer){
  
    this.multiply();

  } else{

     console.log(this.input   " "   "is incorrect"   " "    typeof 
     this.answer);
  }
    
}
 

Комментарии:

1. Вероятно, потому this , что не определено в этом контексте.

2. Можете ли вы вставить рабочий фрагмент в свой вопрос — в частности, чтобы показать, как вызывается GetInput и связь между chkAns и checkAnswer .

3. @AHaworth Ссылка: app-x.stackblitz.io

Ответ №1:

Вы можете сделать одну из трех вещей:

  1. Сделайте функцию, которую вы передаете (chkAns), атомарной — то есть, чтобы она не требовала определенного состояния (this.input, this.answer), и получите эти параметры при ее вызове (поэтому вместо chkAns() , вы будете делать chkAns(this.input, this.answer)
  2. Не передавайте его из шаблона, а вызывайте this.CheckAnswer() внутри getInput
  3. Передайте this contex в chkAns при его вызове: chkAns.call(this) — Я думаю, что этот параметр является наименее «угловатым» вариантом

Вот рабочий стекблитц второго варианта