Bootstrap和LitElement

时间:2019-10-08 15:10:44

标签: twitter-bootstrap lit-element

我正在尝试在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);

1 个答案:

答案 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/28131https://github.com/twbs/bootstrap/issues/18015https://github.com/twbs/bootstrap/issues/14200上进行了许多精彩的交谈,但您可以通过这些内容进行学习发布当前状态。 UI组件,特别是在诸如Bootstrap之类的未在特定框架上投入大量资金(如果不包括JQuery的情况)的情况下,是Web组件的绝佳用例,我希望看到这种前进的道路,因为库使它们蒸蒸日上定位新版本。