Angular 4/Angular-cli: Date Polyfill с API интернационализации не работает

Кажется, я не могу заставить работать полифил API интернационализации. Как указано в документах (https://angular.io/docs/ts/latest/guide/pipes.html) нужно просто добавить скрипт в ваш index.html:

<script src="https://cdn.polyfill.io/v2/polyfill.min.js?features=Intl.~locale.de"></script> 

И все проблемы с неправильным отображением каналов даты должны исчезнуть. Однако эта проблема все еще сохраняется.

На другой веб-странице (https://coryrylan.com/blog/adding-the-internationalization-polyfill-to-a-angular-cli-project), я нашел более предпочтительное решение: установить API интернационализации и добавить его в polyfills.ts в папке angular src.

Нужно npm run install intl --save, а затем импортировать intl polyfill, например import 'intl'; import 'intl/locale-data/jsonp/de.js';, но это тоже не работает.

У кого-нибудь был успех с добавлением полифилла даты в Angular 4?

Некоторые предлагали использовать пользовательский канал из moment.js, но это не может быть решением для меня (Канал даты Angular2 не работает в IE 11 и Edge 13/14), так как такой мощный зверь, как angular, должен обеспечивать такую ​​функциональность. Может я что-то не так сделал?


person BigPenguin    schedule 27.04.2017    source источник
comment
похоже, что cdn.polyfill.io cdn не обслуживает полифиллы js. может быть проблема cdn на их конце. даже живые примеры не возвращают никакого кода, только комментарий: cdn.polyfill.io/v2 /docs/примеры. Предпочтительный подход действительно использует NPM и импортирует нужный вам полифилл.   -  person Ahmed Musallam    schedule 27.04.2017
comment
Спасибо за ответ, у вас получилось?   -  person BigPenguin    schedule 27.04.2017
comment
не пробовали, не знаете чего ожидать? если это работает, как бы вы узнали? как бы вы его протестировали? Не могли бы вы настроить пример кода, который я могу попробовать на своем локальном компьютере с ожидаемым результатом с intl/de и без него?   -  person Ahmed Musallam    schedule 27.04.2017
comment
Мне жаль, я думаю, это была моя вина. Полифил работал, но я не заметил, так как у меня был неправильный формат. Я думал, что могу свободно форматировать как `| date : 'HH:mm'`, так как я думал, что мне нужно немецкое время. Но поскольку я установил правильную локаль, я мог использовать Angulars «shortTime» для форматирования. Странно, что это работало в хроме, но не в крае...   -  person BigPenguin    schedule 27.04.2017
comment
так каков ожидаемый формат? как дата будет отформатирована? какой немецкий формат? можете привести примеры?   -  person Ahmed Musallam    schedule 27.04.2017
comment
У меня было const tTraining :Training = {Device : tDevice, TrainingTime: new Date(2017,04,27) } as Training, так что теперь я попытался получить правильное немецкое время, которое можно было записать как: 21:49 или 09:49 PM. Поскольку второй менее используется в Германии, я хотел получить первый и попытался использовать tTraining.TrainingTime | date : 'HH:mm', поскольку, насколько мне известно, HH означает часы из двух цифр, а mm - минуты. Но мне не повезло с этим в краю. Trainee.TrainingTime | date: 'shortTime' работает и дает мне первый из двух вариантов и работает, когда в app.module.ts указана локаль 'de'   -  person BigPenguin    schedule 27.04.2017
comment
Давайте продолжим обсуждение в чате.   -  person Ahmed Musallam    schedule 27.04.2017


Ответы (1)


Вы не можете свободно использовать angulars datePipe для форматирования дат. Вот так: | date: 'HH:mm' это работает в хроме, но не в крае для отображения: 08:15. Для этого вы можете использовать канал Angular «shortTime».

РЕДАКТИРОВАТЬ 08.05.2017: Кто-нибудь все еще сталкивается с проблемами с InternationalizationAPI в Safari: убедитесь, что вы передаете дату, например {{"2016-07-03T12:33Z" | date 'dd.MM.yyyy'}}, поэтому вам нужно ее строковое представление ISO, чтобы оно работало (необходимо только в сафари), спасибо яблоко.

person BigPenguin    schedule 27.04.2017