解决 Angular 6 在 IE11 中无法正常显示的问题

阅读时长 9 分钟读完

随着 IE11 的使用逐渐减少,越来越多的前端开发者选择在项目中放弃对 IE11 的支持。但是在一些特定场景下,我们仍然需要对 IE11 进行支持,因此,解决 Angular 6 在 IE11 中无法正常显示的问题也显得尤为重要。

问题描述

在使用 Angular 6 构建的 Web 应用中,在 IE11 中打开页面后,会出现空白或者部分内容无法正确渲染的情况。

问题原因

Angular 6 使用的默认 ES5 转译器无法兼容 IE11 中的所有 JavaScript 特性,因此在 IE11 中会出现部分代码无法正常执行的情况。

解决方案

要解决这个问题,需要进行以下两个步骤:

1. 安装额外的依赖

为了让 Angular 6 能够在 IE11 中正常使用,需要安装以下两个依赖:

其中,classlist.js 是用来让 IE11 支持 Element.classList 属性的库,web-animations-js 则是用来让 IE11 支持 CSS3 动画的库。

2. 配置 babel

安装完上述依赖后,我们需要配置 Angular CLI 使用 babel 而不是默认的 ES5 转译器。

2.1 安装 babel 相关依赖

首先,我们需要安装 babel 相关的依赖:

其中,@babel/core 是 babel 的核心库,@babel/preset-env 是 babel 的预设库,用于根据当前的环境来决定需要使用哪些插件来进行转译,babel-loader 是用于在 webpack 中使用 babel 的 loader。

2.2 配置 Angular CLI

在安装好依赖后,需要对 Angular CLI 进行如下配置:

首先,在项目根目录下新建一个 .babelrc 文件,用于配置 babel 的相关选项:

-- -------------------- ---- -------
-
  ---------- -
    -
      --------------------
      -
        -------------- ------
        ---------- -
          ----- ----
        -
      -
    -
  -
-

其中,useBuiltIns: false 表示禁止自动导入 polyfills,targets: { ie: '11' } 表示编译出的代码要兼容 IE11。

接着,在 angular.json 文件中添加以下配置:

-- -------------------- ---- -------
-
  -------- -
    ---------- -
      ------------------------------ -
        ---------------
        -------------------
      --
      ----------- -----
      ----------- --------------------------
      ---------------------- -
        ------- ----------------------------
        ------------------ - ------------ --------- -
      --
      -------------------- -----
      ------ -----
      ---------------- ------
      ------------- -----
      ------------ -----
    -
  -
-

其中,allowedCommonJsDependencies 表示允许在编译时使用 CommonJS 模块加载器来加载依赖项,es5BrowserSupport 表示编译出的代码要兼容 ES5,并禁止默认的 ES2015/ES2017 语法转换,customWebpackConfig 表示使用自定义的 webpack 配置,用于进行 babel 转译。

extra-webpack.config.js 文件中添加以下配置:

-- -------------------- ---- -------
----- ------- - -------------------
----- ------------ - -------------------------

-------------- - -------- -------- -
    ------ -------------------- -
        ------- -
            ------ -
                -
                    ----- --------
                    ---- -
                        ------- ---------------
                        -------- -
                            -------- -
                                -
                                    --------------------
                                    -
                                        ------------ ------
                                        -------- -
                                            --- ----
                                        -
                                    -
                                -
                            -
                        -
                    --
                    -------- --------------
                -
            -
        --
        -------- -
            --- -----------------------------
                -------- -
                    ----------- -
                        --------- -----
                    -
                -
            --
        -
    ---
--

在这个文件中,我们对 .js 文件使用 babel 进行转译,并设置相应的参数进行兼容性处理。

最后,在 polyfills.ts 文件中添加以下代码:

这样,我们就完成了对 Angular 6 在 IE11 中的兼容性处理。

示例代码

下面,给出一个简单的示例代码。

首先,在项目根目录下执行以下命令创建新的 Angular 6 项目:

接着,在项目根目录下添加 extra-webpack.config.js 文件,内容如下:

-- -------------------- ---- -------
----- ------- - -------------------
----- ------------ - -------------------------

-------------- - -------- -------- -
    ------ -------------------- -
        ------- -
            ------ -
                -
                    ----- --------
                    ---- -
                        ------- ---------------
                        -------- -
                            -------- -
                                -
                                    --------------------
                                    -
                                        ------------ ------
                                        -------- -
                                            --- ----
                                        -
                                    -
                                -
                            -
                        -
                    --
                    -------- --------------
                -
            -
        --
        -------- -
            --- -----------------------------
                -------- -
                    ----------- -
                        --------- -----
                    -
                -
            --
        -
    ---
--

app.component.ts 中添加以下代码:

-- -------------------- ---- -------
------ - ---------- ------ - ---- ----------------

------------
  --------- -----------
  --------- -
    ---------- -----------
  --
  ------- --
--
------ ----- ------------ ---------- ------ -
  ---------- --
-

polyfills.ts 中添加以下代码:

最后,在浏览器中运行项目,即可看到 Hello, world! 文字正常显示。

总结

本文介绍了解决 Angular 6 在 IE11 中无法正常显示的问题的方法,包括安装额外的依赖以及使用 babel 进行转译。通过本文的介绍,我们可以更好地了解到如何解决兼容性问题,让 Web 应用在更广泛的浏览器上正确运行。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6490fe8b48841e9894eff877

纠错
反馈