Angular 4 将一个全局常量放在 zone.js 中可用

7

我正在使用带有TypeScript和zone.js(0.8.4)的Angular(我认为是4版本)。我通过“polyfills.ts”文件导入zone.js。当我查看zone.js的源代码时,发现代码如下:

var isDisableIECheck = _global['__Zone_disable_IE_check'] || false;

我的问题是,我如何在_globals中设置这个变量?
谢谢。

你为什么需要那个? - Max Koretskyi
2
我需要设置这个:_global['__Zone_enable_cross_context_check'],否则我会得到IE错误。 - Jojje
https://github.com/angular/zone.js/blob/master/lib/browser/event-target.ts - Jojje
在第82行(委托) - Jojje
2个回答

11

global在浏览器中是window对象,如下所示:

(function (global, factory) {
    typeof exports === 'object' && typeof module !== 'undefined' ? factory() :
    typeof define === 'function' && define.amd ? define(factory) :
    (factory());
}(this,    <------------ `this` points to `window` in global scope
 (function () { 
   ...
});

那么你可以像这样设置变量:

window['__Zone_disable_IE_check'] = true;

但需要在 zone.js 加载之前完成。如果你在 index.html 中加载了 zone.js,请添加以下内容:

<script>
    window['__Zone_disable_IE_check'] = true;
</script>
<script src="node_modules/zone.js/dist/zone.js"></script>

也许你可以看一下我的相关帖子:https://dev59.com/SlcO5IYBdhLWcg3whh9x - Jojje
1
我尝试将window变量放在“polyfills.ts”文件中的zone之前,因为大部分(全部?)JS都是在那里生成的。我可以在Web源代码中看到它(window['__Zone_enable_cross_context_check'] = true;),但是没有起作用。 - Jojje
1
将其放置在所有 polyfill 加载之前的 index.html 中。将其放置在 polyfills.ts 中不起作用,因为所有导入都在 polyfills.ts 之前执行。 - Max Koretskyi

1
在我的情况下,我不得不取消 polyfills 文件中以下行的注释:
(window as any).__Zone_enable_cross_context_check = true;

项目 Angular 版本:Angular 6.0.1。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接