我正在尝试在LitElement组件中使用Bootstrap。 我包括了所有boostrap资产。从理论上讲,它应该起作用。我想知道为什么不这样做(按钮不能打开卡)。
class myShadowModule extends LitElement{
constructor(){
super()
}
render(){
return html`
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
<p>
<a class="btn btn-primary" data-toggle="collapse" href="#collapseExample" role="button" aria-expanded="false" aria-controls="collapseExample">
Click me
</a>
</p>
<div class="collapse" id="collapseExample">
<div class="card card-body">
card opened
</div>
</div>`;
}
}
customElements.define('my-shadow-module', myShadowModule);
答案 0 :(得分:0)
首先,由于lit-html将内容添加到DOM的方式,因此示例中的<script>
标签不会运行,因此您不应看到实际请求的Bootstrap依赖项。 / p>
此外,如果您的示例中的Bootstrap依赖项可用,则它们将尝试使用某种形式的document.querySelector('.collapse')
并且无法定位有问题的元素,因为它封装在LitElement的Shadow DOM中。如果您可以将元素提供给API,即
const elementReference = this.shadowRoot.querySelector('.collapse');
startCollapseWith(elementReference);
可以将轻型DOM解决方案嫁接到影子DOM树上,但是我还没有看到一个Bootstrap的版本可以显示这种API。也许它存在于某个地方?
多年来,在将Bootstrap默认实现移至Web组件:https://github.com/twbs/bootstrap/issues/28131和https://github.com/twbs/bootstrap/issues/18015和https://github.com/twbs/bootstrap/issues/14200上进行了许多精彩的交谈,但您可以通过这些内容进行学习发布当前状态。 UI组件,特别是在诸如Bootstrap之类的未在特定框架上投入大量资金(如果不包括JQuery的情况)的情况下,是Web组件的绝佳用例,我希望看到这种前进的道路,因为库使它们蒸蒸日上定位新版本。