Angular2 IE11 Невозможно получить свойство 'apply' из undefined или null reference
Я получаю следующую ошибку после обновления пакетов angular2 до следующих версий:
- @angular/common ":" ^ 2.3.1
- @angular/компилятор ":" ^ 2.3.1
- @angular/core ":" ^ 2.3.1
- @angular/forms ":" ^ 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
Ошибка: Unable to get property 'apply' of undefined or null reference
![введите описание изображения здесь]()
Я получаю эту ошибку только в IE11, в Chrome она отлично работает.
Я сделал некоторое копирование, и строка, которая вызывает ошибку, находится в angular/общем модуле:
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
Ответы
Ответ 1
Если вы используете @angular/cli
и собираетесь поддерживать IE9-11, вы можете отредактировать файл src/polyfills.ts
, чтобы включить соответствующие полисы. Необходимые полиполки уже находятся в файле, поэтому все, что вам нужно сделать, это не комментировать их.
По умолчанию @angular/cli
проекты нацелены на "вечнозеленые" браузеры из коробки, что означает, что IE не поддерживается сразу, но вы можете добавить поддержку, импортировав полисы для необходимых функций.
Ответ 2
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";
Ответ 3
В соответствии с MDN Object.assign()
Совместимость с браузером IE не поддерживается.
Вы можете импортировать Object.assign
polyfill с помощью MDN с номером npm.
(mdn-polyfills)
Run:
npm i mdn-polyfills --save
Применение:
import 'mdn-polyfills/Object.assign';
Ответ 4
Это действительно раздражает то, что Angular Руководство по материалам не упоминает эту проблему. Любой, кто использует IE11 и следуя их руководству, столкнется с этой проблемой.
Решение, как отмечали другие, состоит в том, чтобы просто раскомментировать эти строки в файле проекта polyfills.ts
.
![введите описание изображения здесь]()
Но на самом деле это должно было упоминаться в их учебнике.
Я провожу слишком много часов в Google, чтобы найти решения этих проблем Angular...
Ответ 5
Работа в браузере IE
Шаг 1: Выполнить: npm i mdn-polyfills --save
Шаг 2: Открыть polyfills.ts
Шаг 3: UnComment импорт в файл под /** IE9, IE10 и IE11 требует всех следующих полиполнений. **/
Ответ 6
на вашем файле polyfills.ts add:
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';
Ответ 7
Если вы используете angular 4.x и сталкиваетесь с этой ошибкой, то для меня работало решение, описанное в https://github.com/angular/angular-cli/issues/6036.
Кажется, что есть ошибка с версией 0.8.8 из "zone.js". Однако отказ от версии 0.8.4 разрешил проблему. Подробнее см. Ссылку.
Ответ 8
Кажется, что angular -cli (v1.0.0-rc.0) имеет файл, называемый polyfills.ts, в котором вы должны отменить комментарий для всех необходимых полиполнений для браузеров. Это хорошо работает для меня с нулевой установкой в IE -11.
Ответ 9
если кто-либо получил эту ошибку в шаблоне 2.0 в формате dotnet core Angular, используя IE, вот как я его разрешил.
-
установить core-js
npm install core-js --save
-
Добавьте эту строку вверху ClientApp/boot.browser.ts
import 'core-js/client/shim';
Ответ 10
Angular 4 Исправление IE11 для невозможности получить свойство "apply"
Шаг 1: Откройте приложение /boot -browser-ts
Шаг 2: добавьте строку ниже
import 'core-js/client/shim';
Ответ 11
Стас Берков прав, и его ответ привел меня к немного другому решению:
В моем заголовке, где я загружаю все сценарии 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>