Я играю с Angular Elements и пытаюсь добиться максимальной совместимости браузера.Однако я, похоже, зашел в тупик, так как, когда я добавляю полизаполнение IE для Shadow DOM, он ломает элемент в chrome.
Первоначально у меня была ошибка 'Не удалось создать элемент HTML' , поэтому я изменил «target» в моем файле tsconfig.json на es2015 / es6.
tsconfig.json
{
"compileOnSave": false,
"compilerOptions": {
"baseUrl": "./",
"outDir": "./dist/out-tsc",
"sourceMap": true,
"declaration": false,
"module": "es2015",
"moduleResolution": "node",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"target": "es5",
"typeRoots": [
"node_modules/@types"
],
"lib": [
"es2018",
"dom"
]
}
}
Component
// @dynamic
@Component({
selector: 'flexybox-cardmanagement',
templateUrl: './card-management.component.html',
styleUrls: ['./card-management.component.scss'],
encapsulation: ViewEncapsulation.ShadowDom
})
Изменение цели, как оказалось, сломало IE, поскольку es2015 / es6 + не поддерживается.Так что мне довелось найти адаптер custom-elements-es5 в пакете @webcomponents, который оборачивает ES5 для обеспечения необходимой функциональности ES6 браузерам, которым это необходимо.И затем мне также пришлось добавить поддержку пользовательских элементов.
polyfills.ts
/*****************************************************************************************
* APPLICATION IMPORTS
*/
import '@webcomponents/webcomponentsjs/custom-elements-es5-adapter.js';
import '@webcomponents/custom-elements/custom-elements.min';
На данный момент это работает в Chrome, но я получаю следующую ошибкув IE
SCRIPT438: Объект не поддерживает свойство или метод 'attachShadow'
Поэтому я попытался добавить polyfill для Shadow DOM, добавив следующее в мои polyfills.ts:
import '@webcomponents/shadydom';
Что, похоже, решает проблему в IE, но теперь выдает следующую ошибку в chrome:
Uncaught TypeError: Невозможно прочитать свойство 'defineProperties' из undefined