Невозможно отправить событие из JavaScript в Компонент (Ionic) - PullRequest
0 голосов
/ 21 ноября 2018

Мне нужно сообщить компоненту, что файл сценария завершил загрузку.

Моя идея сделать это - использовать событие onload элемента для отправки события.С другой стороны, служба зарегистрирует список событий для этого события и будет ждать, пока клиенты зарегистрируют себя в наблюдаемой, которая будет уведомлять о наступлении события.

Я пробовал это, но безуспешно.Кажется, событие не отправлено.В консоли нет ошибок.

Что я сейчас делаю, так это:

index.html:

<script>
function loadFinish() {
    onLoadFinish = new CustomEvent('onLoadFinish', {
      detail: { },
      bubbles: true,
      cancelable: false
    });
    window.dispatchEvent(onLoadFinish);
}
</script>

<script src="opencv.js" onload="loadFinish();" type="text/javascript">

Этот loadFinish вызван, но я не знаю, еслиdispatchEvent работает ...

Служба:

export class JsLoadService {
    private subjectJsLoad = new Subject<any>();
    constructor() {
        window.addEventListener('onJSLoadFinish', (event) => {
            console.log("notifying...."); // this never show up in the console.
            this.subjectJsLoad.next((event as any).detail)
        })
    }

    onJsLoadFinish():Observable<any> {
        return this.subjectJsLoad.asObservable();
    }
}

Компонент:

ngOnInit(): void {
    this.jsLoadService.onJsLoadFinish().subscribe( data => {
        // also never called...
      console.log("onJsLoadFinish");
    });
  }

Возможно, WebView вмешивается в события объекта окна, но яне уверен, я новичок в Ionic.Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 22 ноября 2018

Я обнаружил свою проблему.Событие было отправлено до инициализации службы, и загрузка файла сценария застряла во время инициализации приложения, включая загрузку службы.Поэтому я решил включить атрибут async в тег сценария:

<script async src="opencv.js" onload="loadFinish();" type="text/javascript">

Таким образом, служба загружена и может регистрировать прослушиватель событий во время загрузки сценария.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...