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

Ответ 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>