Angular2 IE11 Impossible d'obtenir la propriété 'apply' de référence non définie ou nulle

Je reçois l'erreur suivante après avoir mis à niveau mes paquets angular2 vers les versions suivantes:

  • @ Angulaire / commun ":" ^ 2.3.1
  • @ Angulaire / compilateur ":" ^ 2.3.1
  • @ Angulaire / noyau ":" ^ 2.3.1
  • @ Angulaire / formes ":" ^ 2.3.1
  • @ Angulaire / http ":" ^ 2.3.1
  • @ Angular / platform-browser ":" ^ 2.3.1 "
  • @ Angulaire / plate-forme-navigateur-dynamique ":" ^ 2.3.1
  • @ Angular / platform-server ":" ^ 2.3.1
  • @ Angulaire / routeur ":" ^ 3.3.1

Erreur : Unable to get property 'apply' of undefined or null reference

Entrez la description de l'image ici

Je n'obtiens cette erreur que dans IE11, Chrome fonctionne bien.

J'ai fait un certain creusement et la ligne qui provoque l'erreur est dans le module angulaire / commun:

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

Le fichier dactylographe:

@ Angular / common / src / pipes / intl.ts line 175

 function combine(options: Intl.DateTimeFormatOptions[]): Intl.DateTimeFormatOptions { return (<any>Object).assign({}, ...options); } 

Le code qui appelle la fonction combine est @ angulaire / commun / src / pipes / intl.ts ligne 48:

'yMMMdjms': datePartGetterFactory(combine([


METTRE À JOUR

Il semble que l'erreur réelle soit que la méthode .assign n'est pas implémentée dans IE11

Selon MDN Object.assign() compatibilité du navigateur, IE n'est pas pris en charge.

Vous pouvez importer le polyfill Object.assign par MDN avec npm. ( Mdn-polyfills )

Course: npm i mdn-polyfills --save

Utilisation: import 'mdn-polyfills/Object.assign';

Si vous utilisez @angular/cli et que vous souhaitez prendre en charge IE9-11, vous pouvez éditer le fichier src/polyfills.ts pour permettre les polyfills appropriés. Les polyfills requis sont déjà dans le fichier, donc tout ce que vous devez faire est de ne pas les commenter.

Par défaut, les projets @angular/cli ciblent les navigateurs "à feuilles persistantes" hors de la boîte, ce qui signifie que l'IE n'est pas immédiatement pris en charge, mais vous pouvez ajouter du support en important des polyfills pour les fonctionnalités dont vous avez besoin.

Angular a une dépendance sur core-js . Vous pouvez donc utiliser Objectfree Polyfills :

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

Il est vraiment ennuyant que le tutoriel sur les matériaux angulaires ne mentionne pas ce problème. Toute personne utilisant IE11 et après son didacticiel aura ce problème.

La solution, comme d'autres l'ont mentionné, est de simplement décommenter ces lignes dans le fichier polyfills.ts votre projet.

Entrez la description de l'image ici

Mais vraiment, cela aurait dû être mentionné dans leur tutoriel.

Je passe trop d'heures à trouver des solutions à ces problèmes angulaires …

Pour fonctionner dans le navigateur IE

Étape 1: Exécuter: npm i mdn-polyfills --save

Étape 2: Open polyfills.ts

Étape 3: UnComment les importations dans le fichier sous / ** IE9, IE10 et IE11 nécessitent tous les polyfills suivants. ** /

À vos polyfills.ts ajouter:

 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'; 

Si vous utilisez angular 4.x et que vous rencontrez cette erreur, la solution décrite en https://github.com/angular/angular-cli/issues/6036 a fonctionné pour moi.

Il semble qu'il y ait un bug avec la version 0.8.8 de "zone.js". Toutefois, la rétrogradation à la version 0.8.4 a résolu le problème. Voir le lien pour plus de détails.

Il semble que angular-cli (v1.0.0-rc.0) possède un fichier appelé polyfills.ts dans lequel vous devez désactiver tous les polyfills requis pour les navigateurs, cela fonctionne bien pour moi avec une installation nulle dans IE-11.

Stas Berkov a raison, et sa réponse m'a amené à une solution légèrement différente:

Dans mon en-tête où je charge tous les scripts Angulaires, j'ai inclus shim.js. (Je regroupe / minifie le déploiement). Note importante: il est essentiel que shim.js soit chargé avant zone.js, sinon vous obtenez une erreur différente.

 <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>