Привязка функции обратного вызова в Angular

#angular #typescript

#angular #typescript

Вопрос:

Я получил внешний js-файл, загруженный в мой проект Angular, и одна из функций — это функция обратного вызова, которую я назначил одной из своих функций fnBarcodeScanned(scan) .

Все работает правильно, поскольку я получаю предупреждение с правильно отсканированным штрих-кодом, но следующая строка не присваивает штрих-код моей локальной переменной this.scanData .

 export class HomeComponent implements OnInit {
 scanData: string;

 ngOnInit() {
 }

 fnScanEnable() {
    EB.Barcode.enable({ allDecoders: true }, this.fnBarcodeScanned);
    this.scanData = "enabled: press HW trigger to capture.";
 }

 fnBarcodeScanned(scan) {
   alert(scan.data);
   this.scanData = "barcode: "   scan.data;
 }

  fnScanDisable() {
   EB.Barcode.disable();
   this.scanData = "disabled: press 'enable' to scan.";
 }
}
  

Как я могу привязать fnBarcodeScanned(scan) функцию? Как мне кажется, он потерял привязку к компоненту, когда он был передан в обратный вызов.

Ответ №1:

Вы можете либо использовать bind() , либо arrow function

Использование bind() :

 fnScanEnable() {
    EB.Barcode.enable({ allDecoders: true }, this.fnBarcodeScanned.bind(this));
    this.scanData = "enabled: press HW trigger to capture.";
 }
  

Использование arrow function :

 fnBarcodeScanned = (scan) => {
   alert(scan.data);
   this.scanData = "barcode: "   scan.data;
 }
  

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

1. Не могли бы вы также попробовать преобразовать fnScanEnable() в функцию стрелки?

2. по-прежнему никаких изменений

3. Тогда я не знаю, что еще делать. Можете ли вы создать проект в stackblitz.com чтобы я мог помочь вам дальше?

4. Это невозможно, поскольку внешний js-файл работает только на портативном устройстве. Функции работает нормально, когда я не использую угловой, но простой в <script></script>. Но я хочу интегрировать это с приложением angular.

5. Может быть, есть другой способ, которым я мог бы передать данные из этой функции в компонент?