首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获取slot的文本内容?

如何获取slot的文本内容?
EN

Stack Overflow用户
提问于 2020-10-12 11:32:09
回答 2查看 762关注 0票数 1

我们可以使用带有slot的stencilJS元素,如下所示

代码语言:javascript
复制
<my-component>123</my-component>

我正在尝试从我的render方法本身获取123的值,想知道这是否可能?

代码语言:javascript
复制
@Component({ tag: 'my-component' })
export class MyComponent {
  render() {
    return (
      <div><slot /></div>
    )
  }
}

我想在123上进行一些字符串格式化,而不是直接呈现slot

EN

回答 2

Stack Overflow用户

发布于 2020-10-14 20:37:53

代码语言:javascript
复制
import { Element } from '@stencil/core';

@Component({ tag: 'my-component' })
export class MyComponent {
  /**
   * Reference to host element
   */
  @Element() host: HTMLElement;

  componentWillRender() {
    console.log(this.host.innerHTML)
  }
  
  render() {
    return (
      <div><slot /></div>
    )
  }
}

票数 1
EN

Stack Overflow用户

发布于 2020-12-28 10:19:42

在web组件中,其中的内容也是主DOM的一部分。如果不使用插槽,这个内容就不会显示出来;但是,无论如何,这个内容都会投射到#shadow-root旁边(使用“元素”部分中的chrome developer工具来查看)。

因此,如果不想使用默认插槽显示内容,可以使用属性装饰器@Element()并声明一个HTMLElement类型的属性:

然后,您可以通过innerHTMLinnerText访问内容。

最后,您可以格式化内容。检查下面的代码片段:

代码语言:javascript
复制
import { Component, Element, h } from "@stencil/core";
@Component({
    tag: 'my-component',
    styleUrl: 'my-component.css',
    shadow: true
})

export class MyComponent {
    @Element() element: HTMLElement;

    formatContent(content: any) {
        if ( isNaN(content)){
            // Your format here
            return content;
        } else {
            return content + '.00';
        }
    }
    render() {
        return [
            // Commented slot tag
            // <slot></slot>,
            <div> {this.formatContent(this.element.innerHTML)} </div>
        ];
    }
}

使用具有2个字符串和一个数字的三次web组件作为条目数据,结果应该是:

代码语言:javascript
复制
My text
My text 2
123.00
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64311361

复制
相关文章

相似问题

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