Angular2 IE11 не удается получить свойство "применить" неопределенной или нулевой ссылки
Я получаю следующую ошибку после обновления моих пакетов angular2 до следующих версий:
- @angular / common": "^2.3.1
- @angular / compiler": "^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 он отлично работает.
Я немного покопался, и линия, которая вызывает ошибку, находится в угловом / общем модуле:
function combine(options) {
return (_a = ((Object))).assign.apply(_a, [{}].concat(options));
var _a;
}
файл машинописного текста:
@angular/common/src/pipes / intl.ТС строка 175
function combine(options: Intl.DateTimeFormatOptions[]): Intl.DateTimeFormatOptions {
return (<any>Object).assign({}, ...options);
}
код звонит в - это @angular/common/src/pipes / intl.ТС строка 48:
'yMMMdjms': datePartGetterFactory(combine([
обновление
кажется, что фактическая ошибка заключается в том, что .assign
метод не реализован в IE11
11 ответов:
Если вы используете
@angular/cli
и намерены поддерживать IE9-11 вы можете редактироватьsrc/polyfills.ts
файл для включения соответствующих полифилл. Необходимые полифиллы уже находятся в файле, поэтому все, что вам нужно сделать, это не комментировать их.по умолчанию
@angular/cli
проекты нацелены на" вечнозеленые " браузеры из коробки, что означает, что IE не поддерживается сразу, но вы можете добавить поддержку, импортируя полифайлы для необходимых вам функций.
по данным MDN
Object.assign()
совместимость с браузерами IE не поддерживается.вы можете импортировать
Object.assign
polyfill by MDN С НПМ. (mdn-polyfills)Run:
npm i mdn-polyfills --save
использование:
import 'mdn-polyfills/Object.assign';
Это действительно раздражает, что угловые материалы учебник не упоминает эту проблему. Любой, кто использует IE11 и следуя их учебник ударит по этой проблеме.
решение, как уже упоминалось, состоит в том, чтобы просто раскомментировать эти строки в вашем проекте .
но на самом деле, это должно было быть упомянуто в учебнике.
Я провожу слишком много часов в Гугле, чтобы найти решения этих угловых задач...
для работы в браузере IE
Шаг 1:Run:
npm i mdn-polyfills --save
Шаг 2: открыть
polyfills.ts
Шаг 3: раскомментировать для импорта в файл под / * * IE9, IE10 и IE11 требуются все следующие полифиллы. ** /
на ваших полифилл.ТС добавлю:
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';
Если кто-то получил эту ошибку в угловом шаблоне dotnet core 2.0 с помощью IE, вот как я ее разрешил.
установить core-js
npm install core-js --save
добавьте эту строку в верхней части ClientApp / boot.браузер.ТС
импорт 'core-js / client / shim';
Если вы используете угловой 4.x и наткнуться на эту ошибку, то решение, описанное вhttps://github.com/angular/angular-cli/issues/6036 работал на меня.
похоже, что есть ошибка с версией 0.8.8 " зоны.js". Однако понижение до версии 0.8.4 решило проблему. См. ссылку для получения более подробной информации.
Angular 4 IE11 fix for unable to get property 'apply'
Шаг 1: Откройте приложение / boot-browser-ts
Шаг 2: Добавьте нижеприведенную строку
import 'core-js/client/shim';
кажется, угловые-интерфейс командной строки(В1.0.0-радиоуправляемый.0) имеет файл под названием polyfills.ts, в котором вы должны отменить все необходимые polyfills для браузеров, он хорошо работает для меня с нулевой установкой в IE-11.
Стас Берков прав, и его ответ привел меня к несколько иному решению:
в моем заголовке, где я загружаю все угловые скрипты, которые я включил shim.js. (Я связываю / минимизирую при развертывании). Большое Примечание: это очень важно, что прокладка.js будет загружен перед зоной.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>