首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LitElement <slot>未唤醒

LitElement <slot>未唤醒
EN

Stack Overflow用户
提问于 2019-12-17 04:25:05
回答 1查看 1K关注 0票数 3

我正在创建我的自定义折叠元素。其中我将有两个组件,一个用于ul,另一个用于li。

在accordion-ul.ts文件中的内容,我在其中有一个我想要我的li的位置。

代码语言:javascript
复制
import { html, customElement, property, LitElement } from 'lit-element';
import { Accordion } from 'carbon-components';

@customElement('accordion-panel')
export default class AccordionPanel extends LitElement {
  firstUpdated() {
    const accordionElement = document.getElementById('accordion');
    Accordion.create(accordionElement);
  }

  connectedCallback() {
    super.connectedCallback();
  }

  render() {
    return html`
      <ul data-accordion class="accordion" id="accordion">
        <slot></slot>
      </ul>
    `;
  }

  createRenderRoot() {
    return this;
  }
}

注意:我在控制台的firstUpdated()中收到一个错误: Uncaught (in promise) TypeError: Cannot read property 'nodeName‘of null。

我使用它进行测试的方式是:

代码语言:javascript
复制
<accordion-panel><li>test</li></accordion-panel>

IDK,它不工作,屏幕上什么也没有打印出来。在检查元素时,我可以看到DOM中是空的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-17 12:08:56

您的问题是您正在尝试使用插槽,这是一个影子DOM特性,但是您没有使用影子DOM (因为您正在重写createRenderRoot方法以防止创建shadowRoot)。

因此,如果希望使用插槽,只需从类中删除createRenderRoot函数并使用影子DOM即可

编辑:您还应该更新您的firstUpdated方法,以便此部分:

const accordionElement = document.getElementById('accordion');

使用阴影DOM中的元素

const accordionElement = this.shadowRoot.querySelector('.accordion');

但是,CarbonComponents样式可能不起作用,因此您需要以其他方式添加这些样式

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59363808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档