如何在没有Shadow DOM的情况下创建LitElement?

use*_*530 3 javascript shadow-dom polymer lit-element

我正在使用LitElement创建一个Web组件。这来自https://lit-element.polymer-project.org/guide/start

// Import the LitElement base class and html helper function
import { LitElement, html } from 'lit-element';

// Extend the LitElement base class
class MyElement extends LitElement {

  /**
   * Implement `render` to define a template for your element.
   *
   * You must provide an implementation of `render` for any element
   * that uses LitElement as a base class.
   */
  render(){
    /**
     * `render` must return a lit-html `TemplateResult`.
     *
     * To create a `TemplateResult`, tag a JavaScript template literal
     * with the `html` helper function:
     */
    return html`
      <!-- template content -->
      <p>A paragraph</p>
    `;
  }
}
// Register the new element with the browser.
customElements.define('my-element', MyElement);
Run Code Online (Sandbox Code Playgroud)

如何在没有Shadow DOM的情况下创建LitElement?

我想在没有#shadow-root的情况下创建它:
在此处输入图片说明

Jus*_*ani 11

只是为了确保此问题显示为已回答:

createRenderRoot允许您覆盖创建影子根的操作。通常用于渲染dom:

createRenderRoot() {
  return this;
}
Run Code Online (Sandbox Code Playgroud)

尽管它可以完全用于渲染其他地方。

我真的建议使用影子DOM。如果元素覆盖其自己的轻型DOM,则组合将很困难。

  • 您还建议如何使用 Bootstrap 或其他网站范围的样式表? (8认同)
  • @TinaChen Web 组件允许您组件化您的代码,如果您尚未使用 React/Vue/Angular 等,这几乎总是一个改进。您仍然可以获得封装。此外,如果您已经拥有包含大量 CSS 规则的庞大代码库,则可能很难将样式转换为使用 lit CSS。还有许多其他小问题使得采用 Shadow DOM 变得复杂。我们并不是生活在一个理想的世界中。 (3认同)
  • 理想情况下,您的样式表被分解,以便您可以仅导入每个组件所需的部分。我会将这些部分包装在 JS 模块中,以便它们可以自动加载组件、捆绑等,然后将它们注入到影子根中。 (2认同)
  • 插槽仅特定于 Shadow-dom 吗?light dom不能也使用插槽吗? (2认同)