Рекомендуемый подход к использованию Angular Elements с Internet Explorer 11

Ищу руководство по использованию Angular Elements, которое будет работать в других браузерах, особенно с Internet Explore 11.

До сих пор следуя рекомендуемому соглашению об использовании ngDoBootstrap для определения пользовательского элемента (Angular Element). Он работает только в Chrome, но когда дело доходит до IE, тег элемента виден в DOM, но ничего не отображается в браузере. Архитектура следующая: Компоненты, сервисы, каналы... все они разделены на модули.

Затем с помощью customElements.define() определяется родительский компонент. Как только это применяется в DOM, такие действия, как обнаружение изменений событий щелчка... очень хорошо работают в Chrome (текущая версия: 72.0.3626.121), но в IE ничего не отображается. Я потратил несколько часов на изучение различных подходов к работе в IE. Я просмотрел некоторые вопросы и ответы, представленные здесь, особенно с использованием полифиллов, но безуспешно.

Затем я попытался определить по одному компоненту за раз в порядке родительский > дочерний, но снова столкнулся с разными проблемами, когда IE начал выдавать ошибки сценария, особенно связанные с zone.js и vendor.js (но не в chrome). При этом я смог увидеть элемент, но действия и обнаружение изменений не работают.

Я попробовал этот подход здесь, но затем начал сталкиваться с ошибками внедрения зависимостей. Пока одна проблема влечет за собой другую.

Причиной выбора использования AngularElements является попытка интегрировать его с существующим проектом, написанным в другом технологическом стеке.

Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
6
2
5 813
3

Ответы 3

Из официальный документ мы могли видеть, что:

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

Я также пытаюсь протестировать официальный документ, содержащий демоверсию, он хорошо работает в браузере Chrome, но не работает в браузере IE/Edge.

В браузере IE будет отображаться синтаксическая ошибка, например:

Итак, как говорится в официальном документе, они работают над реализацией пользовательского элемента для поддержки браузера IE/Edge. Вы также можете сообщить об этой проблеме Угловые проблемы.

Он поддерживает все браузеры, вам нужно изменить polyfill.ts файл

  1. Для поддержки Internet Explorer 9, 10 или 11 и Chrome <55 требуются все следующие полифилы.

    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/weak-map'; import 'core-js/es6/set';

  2. Для IE10 и IE11 требуется следующее для поддержки NgClass в элементах SVG.

    import 'classlist.js'

  3. Для IE10 и IE11 требуется следующее для Reflect API.

    import 'core-js/es6/reflect';

поэтому перейдите в свой файл src/pollyfill.ts, чтобы включить эти зависимости Internet Explorer. если какая-либо зависимость отсутствует, вы можете использовать их. и работает нормально.
Вы можете узнать больше о поддержке браузера angular здесь

В дополнение к добавлению полифиллов мне также нужно было объявить Zone_enable_cross_context_check. Затем я смог увидеть содержимое шаблона родительского компонента, отображаемое в DOM. С этого момента обнаружение изменений не работает должным образом для всех других компонентов, особенно в шаблоне. ngIf не работает, потому что шаблон никогда не обновляется. Я не знаю, почему это не работает, если у меня есть все полифилы и стратегия elements-zone используется для определения пользовательского элемента.

Ниже приведены несколько изображений, демонстрирующих это:

После подписки при успешном получении данных:

Шаблон:

Установить время ожидания:

Как вы можете видеть, обнаружение изменений в IE работает не так, как я ожидаю. В этом сценарии он работает только один раз, когда элемент (компонент) загружается, но для других событий это не так. Я попытался использовать changeDetectorRef для обнаружения изменений там, где это необходимо. Это не увенчалось успехом.

Скриншоты взяты из Internet Explorer 11. Ниже показан один из Chrome, показывающий, что обнаружение изменений работает, как и ожидалось, и в результате контент также успешно загружается.

Хром:

В заключение я скажу, что Angular Elements хорошо работают в Chrome, но не в IE, и если вы хотите, чтобы они работали в IE, вам нужно потратить много времени на поиск решений, почему это не работает. работай. Это время лучше использовать для работы с другой библиотекой/фреймворком.

Другие вопросы по теме