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-browser“:”^ 2.3.1“
- @ angular / platform-browser-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模板中得到这个错误,这是我如何解决它。
-
安装core-js
npm安装core-js –save
-
将此行添加到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>