ionic-framework - Stencil.js 呈现插槽内容,如果 render() 返回 null 则事件

标签 ionic-framework web-component stenciljs

我有一个 Stencil.JS 组件:

import {Component, Prop, h} from '@stencil/core';

@Component({
   tag: 'my-comp',
   styleUrl: 'my-comp.css',
   // shadow: true
})

export class MyComp {
   @Prop() active: boolean = false;
   render() {
      return this.active ? <div>
         <slot></slot>
      </div> : null;
   }
}

当我以这种方式使用组件时,我希望插槽的内容不会呈现:
<my-comp>
   <p>I'm hidden!</p>
</my-comp>

而且,实际上它按预期工作,当“阴影”在组件装饰器中设置为 true 时。
但是,当禁用 shadow DOM 时,无论 this.active 的值如何,组件都会显示 slot 的内容。

我有一种感觉,我不明白渲染是如何与插槽一起工作的。你能给我解释一下吗?如果您知道如何在不以编程方式隐藏插槽内容的情况下解决此问题,我将不胜感激。

最佳答案

接受的答案是不正确的。 Stencil绝对支持<slot> ,即使在非 shadow成分。这就是 Stencil 中内容投影的工作原理。
有一些警告; <slot>元素本身实际上并不是由 Stencil 在 lightdom 组件中渲染的,它们仅用作 Stencil 放置子元素的位置标记。
此外,根据这个问题,不支持条件渲染槽:
https://github.com/ionic-team/stencil/issues/399
我们使用 <slot>在 Stencil lightdom 组件中,并且基本上已经退回到切换 display: none<slot> 周围的 wrapper 上以此目的。这并不理想,但它有效。

关于ionic-framework - Stencil.js 呈现插槽内容,如果 render() 返回 null 则事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56483281/

相关文章:

css - 如何为 stenciljs web 组件添加通用 css

javascript - 模具 |将宿主样式应用于组件

javascript - Ionic4 组件 - 菜单 : must have a 'content' element to listen for drag events on

javascript - Safari - 没有禁用本地文件限制选项

angular - 在 webcomponent 中重置 Angular 路由器状态( Angular 元素)

cordova - ionic - 添加插件失败,因为它已经存在,删除插件失败,因为它不存在

javascript - Polymer 0.8 抛出错误

javascript - 多个 Polymer Web 组件在 Firefox 中失败

angularjs - 带有 ng-repeat 的 Angular 列表,日期作为分隔符

android - Cordova:应用程序在使用相机后重新启动