Nach dem Upgrade meiner angle2-Pakete auf die folgenden Versionen wird folgende Fehlermeldung angezeigt:
- @ eckig / gemeinsam ":" ^ 2.3.1
- @ angle / compiler ":" ^ 2.3.1
- @ Winkel / Kern ":" ^ 2.3.1
- @ eckig / Formen ":" ^ 2.3.1
- @ angle / http ":" ^ 2.3.1
- @ Angular / Platform-Browser ":" ^ 2.3.1 "
- @ angle / platform-browser-dynamic ":" ^ 2.3.1
- @ angle / platform-server ":" ^ 2.3.1
- @ Angular / Router ":" ^ 3.3.1
Fehler :Unable to get property 'apply' of undefined or null reference
Ich erhalte diesen Fehler nur in IE11, in Chrome funktioniert es gut.
Ich habe ein bisschen gegraben und die Linie, die den Fehler verursacht, befindet sich im Winkel- / gemeinsamen Modul:
function combine(options) {
return (_a = ((Object))).assign.apply(_a, [{}].concat(options));
var _a;
}
Die Typoskriptdatei:
@ angle / common / src / pipes / intl.ts Zeile 175
function combine(options: Intl.DateTimeFormatOptions[]): Intl.DateTimeFormatOptions {
return (<any>Object).assign({}, ...options);
}
Der Code, der die combine
Funktion aufruft , lautet
@ angle / common / src / pipes / intl.ts Zeile 48:
'yMMMdjms': datePartGetterFactory(combine([
AKTUALISIEREN
Es scheint, dass der eigentliche Fehler darin besteht, dass die .assign
Methode nicht in IE11 implementiert ist
javascript
angular
typescript
Tjaart van der Walt
quelle
quelle
Antworten:
Wenn Sie
@angular/cli
IE9-11 verwenden und unterstützen möchten, können Sie diesrc/polyfills.ts
Datei bearbeiten , um entsprechende Polyfills zu aktivieren. Die erforderlichen Polyfills befinden sich bereits in der Datei. Sie müssen sie also nur auskommentieren.Standardmäßig
@angular/cli
zielen Projekte auf "immergrüne" Browser ab, was bedeutet, dass der IE nicht sofort unterstützt wird. Sie können jedoch Unterstützung hinzufügen, indem Sie Polyfills für die von Ihnen benötigten Funktionen importieren.quelle
Angular ist abhängig von Core-Js . Dabei können Sie Object.assign- Polyfills daraus verwenden:
import "core-js/client/shim"; // or load it before other angular2 & zone.js stuff import "zone.js"; import "reflect-metadata";
quelle
Es ist wirklich ärgerlich, dass das Angular Materials-Tutorial dieses Problem nicht erwähnt. Jeder, der IE11 verwendet und seinem Tutorial folgt, wird auf dieses Problem stoßen.
Wie andere bereits erwähnt haben, besteht die Lösung darin, diese Zeilen in der
polyfills.ts
Datei Ihres Projekts einfach zu kommentieren .Aber wirklich, das hätte in ihrem Tutorial erwähnt werden sollen.
Ich verbringe viel zu viele Stunden mit Googeln, um Lösungen für diese Winkelprobleme zu finden ...
quelle
Laut MDN-
Object.assign()
Browserkompatibilität wird IE nicht unterstützt.Sie können die
Object.assign
Polyfüllung per MDN mit npm importieren . ( MDN-Polyfills )Lauf:
npm i mdn-polyfills --save
Verwenden:
import 'mdn-polyfills/Object.assign';
quelle
So arbeiten Sie im IE-Browser
Schritt 1: Ausführen:
npm i mdn-polyfills --save
Schritt 2: Öffnen
polyfills.ts
Schritt 3: Dekommentieren Sie die Importe in der Datei unter / ** IE9, IE10 und IE11 erfordert alle folgenden Polyfüllungen. ** /
quelle
bei Ihren polyfills.ts hinzufügen:
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';
quelle
IE
undSafari
, ich kommentiere die relevanten Zeilen aus,polyfill.js
nachdem es bearbeitet wurde,IE
abersafari
immer noch den gleichen Fehler zeigt. Bitte schlagen Sie vor, wie dies in Safari behoben werden kann.Wenn jemand diesen Fehler in einer Dotnet Core 2.0 Angular-Vorlage mit IE erhalten hat, habe ich ihn auf diese Weise behoben.
installiere core-js
npm installiere core-js --save
Fügen Sie diese Zeile oben in ClientApp / boot.browser.ts hinzu
'core-js / client / shim' importieren;
quelle
Wenn Sie Angular 4.x verwenden und auf diesen Fehler stoßen, hat die unter https://github.com/angular/angular-cli/issues/6036 beschriebene Lösung für mich funktioniert.
Es scheint, dass es einen Fehler mit Version 0.8.8 von "zone.js" gibt. Ein Downgrade auf Version 0.8.4 hat das Problem jedoch behoben. Weitere Informationen finden Sie unter dem Link.
quelle
Angular 4 IE11-Fix für Fehler beim Anwenden der Eigenschaft "Übernehmen"
Schritt 1: Öffnen Sie app / boot-browser-ts
Schritt 2: Fügen Sie die folgende Zeile hinzu
import 'core-js/client/shim';
quelle
Es scheint, dass angle-cli (v1.0.0-rc.0) eine Datei namens polyfills.ts hat, in der Sie alle erforderlichen Polyfills für die Browser auskommentieren müssen. Es funktioniert gut für mich ohne Installation in IE-11.
quelle
Stas Berkov hat Recht, und seine Antwort führte mich zu einer etwas anderen Lösung:
In meinem Header, in den ich alle Angular-Skripte lade, habe ich shim.js eingefügt. (Ich bündle / minimiere bei der Bereitstellung). Großer Hinweis: Es ist wichtig, dass shim.js vor zone.js geladen wird, da sonst ein anderer Fehler angezeigt wird.
<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>
quelle