web-dev-qa-db-fra.com

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

Je reçois le message d'erreur suivant après la mise à niveau de mes paquets angular2 vers les versions suivantes:

  • @ angulaire/commun ":" ^ 2.3.1
  • @ angular/compiler ":" ^ 2.3.1
  • @ angulaire/noyau ":" ^ 2.3.1
  • @ angular/formes ":" ^ 2.3.1
  • @ angular/http ":" ^ 2.3.1
  • @ angular/platform-browser ":" ^ 2.3.1 "
  • @ angular/platform-browser-dynamic ":" ^ 2.3.1
  • @ angular/platform-server ":" ^ 2.3.1
  • @ angular/router ":" ^ 3.3.1

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

enter image description here

Je ne reçois que cette erreur dans IE11, dans Chrome cela fonctionne bien.

J'ai creusé et la ligne qui cause l'erreur se trouve dans le module angulaire/commun:

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

Le fichier TypeScript:

@ angular/common/src/pipes/intl.ts ligne 175

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

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

'yMMMdjms': datePartGetterFactory(combine([


UPDATE

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

67
Tjaart van der Walt

Si vous utilisez @angular/cli et prévoyez de prendre en charge IE9-11, vous pouvez modifier le fichier src/polyfills.ts afin d'activer les polyfill appropriés. Les polyfill requis sont déjà dans le fichier, il vous suffit donc de les commenter.

Par défaut, @angular/cli projette les navigateurs "evergreen" prêts à l'emploi, ce qui signifie que IE n'est pas immédiatement pris en charge, mais vous pouvez ajouter un support en important des polyfill pour les fonctionnalités dont vous avez besoin.

98
spoida

Angular a une dépendance sur core-js. Ainsi, vous pouvez utiliser Object.assign polyfills à partir de celui-ci:

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

C'est vraiment ennuyant que le tutoriel sur les matériaux angulaires ne mentionne pas ce problème. Toute personne utilisant IE11 et suivant son tutoriel se heurtera à ce problème.

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

enter image description here

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

Je passe beaucoup trop d'heures sur Google à trouver des solutions à ces Angular problèmes ...

21
Mike Gledhill

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

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

Exécuter: npm i mdn-polyfills --save

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

21
Aldracor

Pour travailler dans le navigateur IE

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

Étape 2: Ouverturepolyfills.ts

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

10
Sreenath S

à votre 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';
6

si quelqu'un a eu cette erreur dans un modèle de dotnet core 2.0 Angular en utilisant IE, voici comment je l'ai résolue.

  1. installer core-js

    npm installer core-js --save

  2. Ajoutez cette ligne en haut de ClientApp/boot.browser.ts

    importer 'core-js/client/shim';

5
gavin

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

Il semble qu'il y ait un bogue avec la version 0.8.8 de "zone.js". Cependant, le retour à la version 0.8.4 a permis de résoudre le problème. Voir le lien pour plus de détails.

4
Chet

Correction angulaire 4 IE11 pour l'impossibilité d'obtenir la propriété 's'applique'

Étape 1: Ouvrez l'application/boot-browser-ts

Étape 2: ajoutez la ligne ci-dessous

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

Il semble que angular-cli (v1.0.0-rc.0) ait un fichier appelé polyfills.ts dans lequel vous devez commenter tous les polyfills requis pour les navigateurs. Cela fonctionne bien pour moi sans installation dans IE-11.

2
Santhanam

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 Angular scripts que j'ai inclus shim.js. (Je bundle/minified sur le déploiement). Note importante: il est essentiel que shim.js soit chargé avant zone.js, sinon vous obtiendrez 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>
1
Michael