我们项目团队的一名成员最近建议我们从Angular1 / Angular-Material转移到Angular2 / AngularMaterial2,因为Safari不兼容。我认为这种不兼容性是Material Design的flexbox问题,而不是Angular问题,但我没有想要在没有先研究的情况下反击。所以我构建了一个Angular2 / Bootstrap和一个Angular2 / AngularMaterial2应用程序,希望证明Material Design是个问题,而转向Angular2是一个不值得接管的改革。
但我很快意识到我的Angular2 / Bootstrap应用程序没有在IE11 / Safari中编译!想象一下我的意外!
我是否需要Angular2中的任何类型的特定指令来修复此兼容性?我发现很难相信这样一个强大的框架会忽略这些浏览器。
注意我图片中的浏览器堆栈。控制台上也没有错误。
我在许多地方按要求添加了ES5和ES6垫片,即此处(Angular 2 with IE 11 not working)但没有雪茄。
有什么想法吗?提前谢谢
答案 0 :(得分:1)
https://angular.io/docs/ts/latest/guide/browser-support.html
强制性polyfills这些是运行Angular所需的polyfill 每个支持的浏览器上的应用程序:
浏览器(桌面和移动)Polyfills需要Chrome,Firefox,Edge, Safari 9+无Safari 7& 8,IE10& 11,Android 4.1 + ES6
答案 1 :(得分:0)
我已经弄明白了这个问题。
显然,Angular CLI故意评论在IE和Safari中编译所需的polyfill。为什么?你的猜测和我的一样好。但令人惊讶的是,他们这样做了。
转到src / polyfills.ts并取消注释行(22-34)。这些将为您提供非常基本的编译,但是,如果您想要使用SVG,角度动画和某些管道,则需要更多注释并需要额外的npm包安装。
/** IE9, IE10 and IE11 requires all of the following polyfills. **/
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';