将angular2软件包升级到以下版本后,出现以下错误:
错误: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;
}
打字稿文件:
@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([
更新
似乎实际的错误是IE11中没有实现.assign
方法
答案 0 :(得分:98)
如果您正在使用@angular/cli
并打算支持IE9-11,则可以编辑src/polyfills.ts
文件以启用相应的polyfill。所需的polyfills已经在文件中,因此您只需取消注释即可。
默认情况下,@angular/cli
项目的目标是“常青树”浏览器开箱即用,这意味着IE不会立即受到支持,但您可以通过导入所需功能的polyfill来添加支持。
答案 1 :(得分: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";
答案 2 :(得分:21)
根据MDN Object.assign()
Browser compatibility,IE不受支持。
您可以使用{h MDN导入Object.assign
polyfill。
(mdn-polyfills)
生成:强>
npm i mdn-polyfills --save
使用:强>
import 'mdn-polyfills/Object.assign';
答案 3 :(得分:21)
Angular Materials tutorial没有提到这个问题真的很烦人。任何使用IE11并遵循他们的教程的人都会遇到这个问题。
正如其他人所提到的,解决方案是简单地取消注释项目的polyfills.ts
文件中的这些行。
但实际上,这应该在他们的教程中提到过。
我花了太多时间谷歌搜索找到这些角度问题的解决方案......
答案 4 :(得分:10)
在IE浏览器中工作
第1步:运行: npm i mdn-polyfills --save
第2步:打开 polyfills.ts
步骤3:取消评论 / ** IE9,IE10和IE11下的文件中的导入需要以下所有polyfill。 ** /
答案 5 :(得分: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';
答案 6 :(得分:5)
如果有人在使用IE的dotnet core 2.0 Angular模板中出现此错误,这就是我解决它的方法。
安装core-js
npm install core-js --save
在ClientApp / boot.browser.ts
的顶部添加此行导入'core-js / client / shim';
答案 7 :(得分:4)
如果您使用的是角度4.x并遇到此错误,那么https://github.com/angular/angular-cli/issues/6036中描述的解决方案对我有效。
似乎“zone.js”版本0.8.8存在错误。但是,降级回0.8.4版解决了这个问题。有关更多详细信息,请参阅链接。
答案 8 :(得分:3)
Angular 4 IE11修复无法获取属性&#39;应用&#39;
第1步:打开app / boot-browser-ts
第2步:添加以下行
final ParseFile bitmapFile = new ParseFile(imageInByte);
bitmapFile.saveInBackground(new SaveCallback() {
@Override
public void done(ParseException e) {
if(e==null){
Log.i("hello"," photo saved ");
ParseObject userDisplayImage = new ParseObject("UserDisplayImage");
userDisplayImage.put("photo", bitmapFile);
userDisplayImage.saveInBackground ();
} else {
e.printStackTrace();
Log.i("Error", e + "photo not saved");
}
}
});
答案 9 :(得分:2)
似乎angular-cli(v1.0.0-rc.0)有一个名为polyfills.ts的文件,你必须在浏览器中取消注释所有必需的polyfill,它对我来说很好,在IE-11中没有安装
答案 10 :(得分:1)
Stas Berkov是对的,他的回答让我得到了一个稍微不同的解决方案:
在我加载所有Angular脚本的标题中,我包含了shim.js. (我在部署时捆绑/缩小)。注意:在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>