在Angular中,如果你想使用自定义XHR polyfill,但是它在zoneJS之外无法起作用,可以尝试以下解决方法:
引入zone.js
确保你在项目中引入了zone.js,这是Angular的依赖之一。你可以在index.html
文件中的标签内引入zone.js,或者在
polyfills.ts
文件中引入。
手动在zone之外创建XHR对象
在你的自定义XHR polyfill中,你可以手动在zone之外创建XHR对象。你可以使用window
对象来创建XHR对象,而不是使用Angular提供的HttpClient
服务。这样,XHR对象就不会受到zone.js的影响。
下面是一个示例代码:
import { Injectable } from '@angular/core';
@Injectable()
export class CustomXHRService {
makeRequest(url: string): Promise {
return new Promise((resolve, reject) => {
const xhr = new window.XMLHttpRequest(); // 在zone之外创建XHR对象
xhr.open('GET', url, true);
xhr.onload = () => {
if (xhr.status === 200) {
resolve(xhr.responseText);
} else {
reject(xhr.statusText);
}
};
xhr.onerror = () => {
reject(xhr.statusText);
};
xhr.send();
});
}
}
在上面的代码中,我们使用window.XMLHttpRequest
手动创建XHR对象,而不是使用Angular提供的HttpClient服务。这样,XHR对象就不会受到zone.js的影响。
希望这个解决方法对你有帮助!