Я создал новый проект, используя стартер компонентов трафарета. Внутри моего компонента я использую внешний JS nouislider, который вставляет элементы HTML в мой div
(this.slider
ref) :
...
componentDidLoad() {
noUiSlider.create(this.slider, {
start: [20, 80],
range: {
'min': 0,
'max': 100
}
})
}
...
Я скопировал CSS слайдера в my-component.css
и переписал все с помощью :host
селекторов для теневого домика:
:host(.my-component) .noUi-target {
position: relative;
direction: ltr
}
Все работает нормально в Chrome / Firefox, но стили слайдера не работают в IE11 / Edge, потому что Stencil добавляет вспомогательный класс sc-my-component
к каждому элементу, который у меня есть внутри метода рендеринга, и генерирует следующие правила CSS:
.my-component.sc-my-component-h .noUi-target.sc-my-component {
position: relative;
direction: ltr
}
но внедренные nouislider
дочерние элементы HTML не имеют на себе вспомогательных классов. У меня есть некрасивое исправление для этого случая банкомата:
...
componentDidLoad() {
noUiSlider.create(this.slider, {
start: [20, 80],
range: {
'min': 0,
'max': 100
}
})
this.slider.querySelectorAll('div').forEach((child)=>{
child.classList.add('sc-my-component')
})
}
...
Я добавляю вспомогательные классы после создания ползунка (ползунок генерирует только дочерний элемент divs
). Есть ли лучший способ сообщить Stencil, что я внедряю элементы внутри методов жизненного цикла и что ему необходимо распознавать эти элементы при создании правил CSS?