Angular2 IE11无法获取属性“应用”的未定义或空引用

将我的angular2软件包升级到以下版本后出现以下错误:

  • @angular/普通“:”^ 2.3.1
  • @ angular / compiler“:”^ 2.3.1
  • @ angular / core“:”^ 2.3.1
  • @ angular / forms“:”^ 2.3.1
  • @ angular / http“:”^ 2.3.1
  • @ angular / platform-b​​rowser“:”^ 2.3.1“
  • @ angular / platform-b​​rowser-dynamic“:”^ 2.3.1
  • @angular/平台服务器“:”^ 2.3.1
  • @angular/路由器“:”^ 3.3.1

错误Unable to get property 'apply' of undefined or null reference

在这里输入图像说明

我只是在IE11中得到这个错误,在Chrome中它工作正常。

我做了一些挖掘和导致错误的行是在angular度/通用模块:

 function combine(options) { return (_a = ((Object))).assign.apply(_a, [{}].concat(options)); var _a; } 

打字稿文件:

@ angular / common / src / pipes / intl.ts第175行

 function combine(options: Intl.DateTimeFormatOptions[]): Intl.DateTimeFormatOptions { return (<any>Object).assign({}, ...options); } 

调用combine函数的代码是@ angular / common / src / pipes / intl.ts第48行:

'yMMMdjms': datePartGetterFactory(combine([


UPDATE

看来实际的错误是.assign方法在IE11中没有实现

根据MDN Object.assign()不支持浏览器兼容 IE。

您可以用npm通过MDN导入Object.assign polyfill。 ( mdn-polyfills )

运行: npm i mdn-polyfills --save

使用: import 'mdn-polyfills/Object.assign';

如果您正在使用@angular/cli并且打算支持IE9-11,则可以编辑src/polyfills.ts文件以启用适当的polyfills。 所需的polyfills已经在文件中,所以你只需要取消注释。

默认情况下, @angular/cli项目的目标是“常绿”浏览器,这意味着IE并不是立即支持的,但是您可以通过导入所需function的polyfill来添加支持。

Angular依赖于core-js 。 从而可以使用Object.assign polyfills:

 import "core-js/client/shim"; // or load it before other angular2 & zone.js stuff import "zone.js"; import "reflect-metadata"; 

Angular Materials教程没有提到这个问题真的很烦人。 任何使用IE11并遵循教程的人都会遇到这个问题。

正如其他人所提到的,解决scheme是简单地取消注释项目的polyfills.ts文件中的那些行。

在这里输入图像说明

但是,真的,这应该已经在他们的教程中提到。

我花了太多时间Googlesearch这些angular度问题的解决scheme…

在IE浏览器中工作

第1步: 运行: npm i mdn-polyfills --save

第2步: 打开 polyfills.ts

步骤3: 取消导入/ ** IE9下的文件,IE10和IE11需要以下所有的填充。 ** /

在你的polyfills.ts添加:

 import 'core-js/es6/symbol'; import 'core-js/es6/object'; import 'core-js/es6/function'; import 'core-js/es6/parse-int'; import 'core-js/es6/parse-float'; import 'core-js/es6/number'; import 'core-js/es6/math'; import 'core-js/es6/string'; import 'core-js/es6/date'; import 'core-js/es6/array'; import 'core-js/es6/regexp'; import 'core-js/es6/map'; import 'core-js/es6/set'; 

如果您使用的是angular度4.x并遇到此错误,那么https://github.com/angular/angular-cli/issues/6036中所述的解决scheme适用于我。;

好像有一个版本0.8.8“zone.js”的bug。 但是,降级到0.8.4版解决了这个问题。 请参阅链接查看更多细节。

看来angular-cli(v1.0.0-rc.0)有一个名为polyfills.ts的文件,在这个文件中你必须取消注释所有浏览器所需的polyfills,它在IE-11中安装为零,对我来说很好。

如果任何人在使用IE的dotnet core 2.0 Angular模板中得到这个错误,这是我如何解决它。

  1. 安装core-js

    npm安装core-js –save

  2. 将此行添加到ClientApp / boot.browser.ts的顶部

    导入'core-js / client / shim';

angular度4 IE11修复无法获得财产“适用”

第1步:打开app / boot-browser-ts

第2步:添加下面的行

 import 'core-js/client/shim'; 

Stas Berkov是正确的,他的回答让我有一个稍微不同的解决scheme:

在我的头文件中,我加载了所有包含shim.js的Angular脚本。 (我捆绑/部署在部署)。 大提示:在zone.js之前加载shim.js是非常重要的,否则会得到不同的错误。

 <script src="/<my domain>/node_modules/core-js/client/shim.js"></script> <script src="/<my domain>/node_modules/zone.js/dist/zone.js"></script> <script src="/<my domain>/node_modules/reflect-metadata/Reflect.js"></script> <script src="/<my domain>/node_modules/systemjs/dist/system.src.js"></script> <script src="/<my domain>/systemjs.config.js"></script>