Angular2 IE11无法获取未定义或空引用的属性"apply"

Tja*_*alt 67 javascript typescript angular

将angular2包升级到以下版本后,出现以下错误:

  • @ angular/common":"^ 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/platform-server":"^ 2.3.1
  • @ angular/router":"^ 3.3.1

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

在此输入图像描述

我只在IE11中收到此错误,在Chrome中它运行正常.

我做了一些挖掘,导致错误的行在angular/common模块中:

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

打字稿文件:

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

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

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

'yMMMdjms': datePartGetterFactory(combine([


UPDATE

似乎实际的错误是.assignIE11中没有实现该方法

spo*_*ida 98

如果您正在使用@angular/cli并打算支持IE9-11,则可以编辑该src/polyfills.ts文件以启用相应的polyfill.所需的polyfills已经在文件中,因此您只需取消注释即可.

默认情况下,@angular/cli项目目标"常青"浏览器开箱即用,这意味着IE不会立即受支持,但您可以通过导入所需功能的polyfill来添加支持.

  • [这篇博文](https://weblogs.asp.net/lduveau/angular-not-working-in-ie11)似乎证实了这个答案. (4认同)

Sta*_*kov 27

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";
Run Code Online (Sandbox Code Playgroud)

  • VS2017没有polyfills文件,所以我在启动应用程序ts文件中添加了代码...运行良好...谢谢 (6认同)
  • 如果你提到这些行在src/polyfills.ts中,你的答案会获得更多的选票.无论如何,谢谢你,帮我解决了这个问题! (5认同)
  • 在新的VS2017 SPA模板中,只需要将**core-js**行添加到boot.server.ts和boot.browser.ts (2认同)

Ald*_*cor 21

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

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

跑: npm i mdn-polyfills --save

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

  • 处理core-js的另一个答案是最简单的答案,因为angular已经依赖于core-js并且不会带来另一个依赖. (3认同)

Mik*_*ill 21

Angular Materials教程没有提到这个问题,这真令人讨厌.任何使用IE11并遵循他们的教程的人都会遇到这个问题.

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

在此输入图像描述

但实际上,这应该在他们的教程中提到过.

我花了太多时间谷歌搜索找到这些角度问题的解决方案......


小智 10

在IE浏览器中工作

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

第2步:打开 polyfills.ts

步骤3:取消注释/**IE9,IE10和IE11下的文件中的导入需要以下所有polyfill.**/

  • 找不到polyfills.ts (2认同)

Yoa*_*man 6

在您的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';
Run Code Online (Sandbox Code Playgroud)


gav*_*vin 5

如果有人在使用IE的dotnet core 2.0 Angular模板中出现此错误,这就是我解决它的方法.

  1. 安装core-js

    npm install core-js --save

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

    import'core-js/client/shim';