Je reçois le message d'erreur suivant après la mise à niveau de mes paquets angular2 vers les versions suivantes:
Erreur : Unable to get property 'apply' of undefined or null reference
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.
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.
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";
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.
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 ...
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';
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. ** /
à 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';
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.
installer core-js
npm installer core-js --save
Ajoutez cette ligne en haut de ClientApp/boot.browser.ts
importer 'core-js/client/shim';
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.
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';
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.
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>