QZ выдает ошибки при установке angular, а веб-сокет не найден

Я пытаюсь заставить свое угловое веб-приложение работать с чековым принтером star sp 700 и по этой причине пытаюсь интегрировать qz-tray в свое программное обеспечение. Я получаю сообщение об ошибке при попытке установить @types/qz-tray, показанное ниже. Также я получаю сообщение об ошибке

unresolved variable websocket

на линии 23 и

unresolved variable api

в строке 16.

Может кто-нибудь, пожалуйста, скажите мне, как это исправить и есть ли лучший способ печати на этом или другом чековом принтере через angular?

import { Injectable } from '@angular/core';
import { from as fromPromise, Observable, throwError } from 'rxjs';
import { HttpErrorResponse } from '@angular/common/http';
import { catchError, map } from 'rxjs/operators';

import * as qz from 'qz-tray';
import { sha256 } from 'js-sha256';

@Injectable({
  providedIn: 'root'
})
export class PrinterService {

  //npm install qz-tray js-sha256 rsvp --save
  constructor() {
    qz.api.setSha256Type(data => sha256(data));
    qz.api.setPromiseType(resolver => new Promise(resolver));
  }
  // Get the list of printers connected
  getPrinters(): Observable<string[]> {
    console.log('+++++++++PrinterService+++++');
    return fromPromise(
      qz.websocket.connect().then(() => qz.printers.find())
    )
    map((printers: string[]) => printers)
      , catchError(this.errorHandler);
  }

  // Get the SPECIFIC connected printer
  getPrinter(printerName: string): Observable<string> {
    return fromPromise(
      qz.websocket.connect()
        .then(() => qz.printers.find(printerName))
    )
    map((printer: string) => printer)
      , catchError(this.errorHandler);
  }

  // Print data to chosen printer
  printData(printer: string, data: any): Observable<any> {
    const config = qz.configs.create(printer);

    return fromPromise(qz.print(config, data))
    map((anything: any) => anything)
      , catchError(this.errorHandler);
  }

  private errorHandler(error: HttpErrorResponse) {
    if (error.error instanceof ErrorEvent) {
      console.log(error.error);
      console.log('An error occurred:', error.status);
      return throwError(error.error);
    } else {
      console.log('An error occurred:', error.status);
      console.log(error.error);
      return throwError(error.error);
    }
  };
}

person zee123    schedule 16.07.2019    source источник


Ответы (1)


неразрешенная переменная websocket
неразрешенная переменная api

Это оба признака того, что qz-tray.js не загрузился должным образом.

Объекты qz.api и qz.websocket являются частью пространства имен qz. Если они недоступны, значит, qz никогда не импортировался должным образом.

Вот рабочий пример QZ Tray, работающего в Angular: https://stackblitz.com/edit/angular-3h4cnv

В качестве шага устранения неполадок вы можете позвонить:

console.log(qz);
  • При правильной загрузке он должен показывать примерно следующее: введите здесь описание изображения

Другим методом устранения неполадок может быть удаление и переустановка qz-tray с помощью предпочитаемого менеджера пакетов npm uninstall qz-tray; npm install qz-tray и т. д.

person tresf    schedule 15.01.2020