web-dev-qa-db-ja.com

Angular2 IE11未定義またはnull参照のプロパティ 'apply'を取得できません

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

enter image description here

IE11でこのエラーが発生するのは、Chromeでのみです。

私はいくつかの掘削を行いましたが、エラーの原因となる行は角度/共通モジュールにあります:

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

TypeScriptファイル:

@ 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に実装されていないことです

67

@angular/cliを使用しており、IE9-11をサポートする場合は、src/polyfills.tsファイルを編集して適切なポリフィルを有効にできます。必要なポリフィルはすでにファイルにあるため、必要なのはコメントを外すことだけです。

デフォルトでは、@angular/cliプロジェクトはすぐに使用できる「常緑」ブラウザをターゲットにします。つまり、IEはすぐにはサポートされませんが、必要な機能のポリフィルをインポートしてサポートを追加できます。

98
spoida

Angularはcore-jsに依存しています。これにより、Object.assignからのポリフィルを使用できます:

import "core-js/client/shim"; // or load it before other angular2 & zone.js stuff
import "zone.js";
import "reflect-metadata";
27

Angular Materials tutorial がこの問題に言及していないのは本当に迷惑です。 IE11を使用し、チュートリアルに従う人は誰でもこの問題に直面するでしょう。

解決策は、他の人が言及したように、プロジェクトのpolyfills.tsファイルのこれらの行のコメントを外すことです。

enter image description here

しかし、実際には、これは彼らのチュートリアルで言及されるべきでした。

これらのAngular問題の解決策を見つけるためにグーグルで過ごす時間が長すぎます...

21
Mike Gledhill

MDN Object.assign()ブラウザの互換性 IEによると、サポートされていません。

MDN npmでObject.assignポリフィルをインポートできます。 ( mdn-polyfills

実行:npm i mdn-polyfills --save

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

21
Aldracor

IEブラウザで作業するには

ステップ1:実行:npm i mdn-polyfills --save

ステップ2:開くpolyfills.ts

ステップ3:nComment/** IE9、IE10、およびIE11の下のファイルのインポートには、以下のすべてのポリフィルが必要です。 ** /

10
Sreenath S

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

iEを使用してdotnet core 2.0 Angularテンプレートでこのエラーが発生した場合、これが解決方法です。

  1. core-jsをインストールする

    npm install core-js --save

  2. ClientApp/boot.browser.tsの上部にこの行を追加します

    import 'core-js/client/shim';

5
gavin

angular 4.xを使用していて、このエラーに遭遇した場合、 https://github.com/angular/angular-cli/issues/6036 で説明されている解決策は私。

「zone.js」のバージョン0.8.8にバグがあるようです。ただし、バージョン0.8.4にダウングレードすると、問題は解決しました。詳細については、リンクを参照してください。

4
Chet

プロパティ「適用」を取得できないためのAngular 4 IE11の修正

ステップ1:app/boot-browser-tsを開く

ステップ2:以下の行を追加します

import 'core-js/client/shim'; 
3
Satendra Jindal

Angular-cli(v1.0.0-rc.0)には、ブラウザーに必要なすべてのポリフィルのコメントを解除する必要があるpolyfills.tsというファイルがあります。IE-11でゼロインストールを行うと、うまく機能します。

2
Santhanam

Stas Berkovは正しいです、そして彼の答えは私にわずかに異なる解決策を導きました:

すべてのAngularスクリプトを読み込むヘッダーに、shim.jsを含めました。 (デプロイ時にバンドル/縮小しました)。大きな注意:shim.jsをzone.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>
1
Michael