Angular с настраиваемым полифилом XHR не работает из-за "вне зоны JS" - PullRequest
0 голосов
/ 05 мая 2020

Проблема заключается в том, чтобы заставить работать один пользовательский полифилл XHR с зоной JS детектором angular.

История:

Я использую Ioni c 4, с angular. На данный момент у меня есть предупреждение об устаревании uiwebview api, поэтому я пытаюсь добавить cordova-plugin-wkwebview-engine, но поскольку я использую плату за некоторые локальные файлы (file: //), плагину не нравится (некоторые части сломаны ), поэтому я установил cordova-plugin-wkwebview-file-xhr, но с этим у меня:

Navigation triggered outside angular zone, did you forget to call ngZone?

Я думаю, проблема в том, что cordova-plugin-wkwebview-file-xhr add / измените таможенный код на de XMLHttpRequest, и обнаружение зоны Js будет потеряно.

Итак, как я могу заставить его работать зону JS с таможней XMLHttpRequest? я могу повторно поставить обнаружение?

Кто-то задает здесь аналогичный вопрос: https://github.com/oracle/cordova-plugin-wkwebview-file-xhr/issues/52 но я думаю, что эта проблема больше связана с angular зоной JS работой с кастомом код

1 Ответ

0 голосов
/ 05 мая 2020

Обычно у вас есть 2 варианта в подобных ситуациях:

  1. обнаружение изменения триггера после получения ответа от вашего «пользовательского» XHR:

https://angular.io/api/core/ChangeDetectorRef

в вашем ts:

import { ChangeDetectorRef } from '@angular/core';

...

public data;

constructor(private cdr: ChangeDetectorRef) {
}
...

callToServer() {
    this.httpService.getData().subscribe((data)=>{
        this.data = data;
        this.cdr.detectChanges();
    })
};
Или вы можете запустить метод, заставляя его находиться внутри зоны Angular, используя зону внутри обратного вызова:

https://angular.io/api/core/NgZone

в ваш ts:

import { NgZone } from '@angular/core';

...

public data;

constructor(private zone: NgZone) {
}
...

callToServer() {
    this.httpService.getData().subscribe((data)=>{
        this.zone.run(() => {
            this.data = data;
        })
    })
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...