带有自定义 XHR 填充物的角形由于"outsite of zoneJS"不起作用



问题是如何使用angular的zoneJS检测器制作一个自定义XHR polyfill。

历史:

我用的是离子4,有棱角。此时此刻,我收到了关于uiwebview api弃用的警告,所以我试图添加cordova插件wkwebview引擎,但因为我使用了一些插件不喜欢的本地文件(文件://((有些部分坏了(,所以我安装了cordova插入wkwebview文件xhr,但有了这个,我就有了:

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

我认为问题是因为cordova插件wkwebview文件xhr添加/修改海关代码以消除XMLHttpRequest,并且丢失了zoneJs检测。

那么,我如何使它与海关XMLHttpRequest一起使用zoneJS呢?我可以重新放检测吗?

有人在这里问了一个类似的问题:https://github.com/oracle/cordova-plugin-wkwebview-file-xhr/issues/52但我认为这个问题更多的是关于angular zoneJS使用自定义代码

在这种情况下,通常有两个选项:

  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();
})
};
  1. 或者您可以运行方法,通过在回调中使用zone来强制它位于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;
})
})
};

最新更新