StencilJS检查命名槽是否为空

时间:2019-05-11 17:26:46

标签: web-component shadow-dom stenciljs

我有一个带有两个命名槽的stencilJS组件。有没有一种方法可以确定是否为插槽分配了值?例如,下面的代码片段显示了“ 徽标”和“ 菜单”的命名槽。如果两个命名插槽都不为空,如何检查组件内部?理想情况下,我想从组件内部以及componentWillMount()进行检查。谢谢。

  <koi-menu breakpoint="768" userToggled="false">
      <div class="logo__header " slot="logo"><img src="assets/images/logo.png" /></div>

      <ul class="nav__wrapper list mw8-ns center-m" slot="menu">
        <li class="nav__listitem"><a class="ttu nav__link" href="???">Why Live Grit</a></li>
        <li class="nav__listitem"><a class="ttu nav__link" href="???">Clients</a></li>
        <li class="nav__listitem"><a class="ttu nav__link" href="???">Our Programs</a></li>
        <li class="nav__listitem"><a class="ttu nav__link" href="???">Our Story</a></li>
      </ul>

  </koi-menu>

2 个答案:

答案 0 :(得分:0)

可以从componentWillLoad()函数中的主机元素检测插槽的使用:

hasLogoSlot: boolean;
hasMenuSlot: boolean;

@Element() hostElement: HTMLStencilElement;

componentWillLoad() {
    this.hasLogoSlot = !!this.hostElement.querySelector('[slot="logo"]');
    this.hasMenuSlot = !!this.hostElement.querySelector('[slot="menu"]');
}

答案 1 :(得分:0)

这可能不适用于您的问题,但是,如果您只想设置带槽元素的样式(例如仅在非空槽上添加边距),则可以使用::slotted pseudo-element

::slotted([slot="logo"]) {
  /* Apply styles to non-empty logo */
}

::slotted([slot="menu"]) {
  /* Apply styles to non-empty menu */
}