【问题标题】:web component manipulate attribute of slotsWeb 组件操作插槽的属性
【发布时间】:2021-11-21 12:23:09
【问题描述】:

我有一个自定义的 Web 组件,它有多个嵌套的 Web 组件。

<pdf-viewer path="test.pdf" clipTop="52" fromPage="6" toPage="9" clipBottom="18"
            pagesCount="29" clipAll>
  <pdf-page pageHeight="842" pageWidth="594" page="1"></pdf-page>
  <pdf-page pageHeight="842" pageWidth="594" page="2"></pdf-page>
  <pdf-page pageHeight="842" pageWidth="594" page="3"></pdf-page>
</pdf-viewer>

pdf-viewer 组件中我想访问 pdf-pagepage 属性,并在此基础上添加一个属性 pdf-page 元素。

所以我的代码如下所示:

import { html, LitElement } from 'lit';

export class PdfViewer extends LitElement {
  static get properties() {
    return {
      path: { type: String },
      fromPage: { type: Number },
      toPage: { type: Number },
      clipTop: { type: Number },
      clipBottom: { type: Number },
      clipAll: { type: Boolean },
      pagesCount: { type: Number },
    };
  }

  constructor() {
    super();

    this.fromPage = 1;
    this.toPage = 0;
    this.clipAll = true;
  }

  firstUpdated() {
      const slot = this.renderRoot.querySelector('slot');
      const pages = slot.assignedNodes();
      pages.forEach(page => {
        const pageNumber = page.getAttribute('page');

        if (this.clipAll && pageNumber === this.fromPage)
          page.setAttribute('clipTop', this.clipTop);
        if (this.clipAll && pageNumber === this.toPage)
          page.setAttribute('clipBottom', this.clipBottom);

        if (
          this.clipAll &&
          (pageNumber < this.fromPage || pageNumber > this.toPage)
        )
          page.setAttribute('clipAll', '');

        page.addEventListener('expand-pdf', () => {
        });
      });
  }

  render() {
    return html`
      <div class="pdfViewer">
        <slot></slot>
      </div>
    `;
  }
}

这不起作用,我没有获取页面属性。

【问题讨论】:

    标签: javascript web-component lit-element


    【解决方案1】:

    我想通了。我必须使用slot.assignedElements() 来获取我可以用来获取/添加属性的 HTMLElements。

    【讨论】:

    • 这是在编写组件之间的固定连接。组件 A 需要知道组件 B 在哪里。当您的应用程序增长时,这很糟糕。意大利面条到处都是。相反,您可以使用事件,然后它完全 重要 where 组件在 DOM 中:open-wc.org/guides/knowledge/events
    • 我使用事件从子组件到父组件进行通信。事件无法从父组件到子组件!?
    • 使用 EventBus 模式:css-tricks.com/…
    猜你喜欢
    • 2017-10-16
    • 1970-01-01
    • 2018-07-28
    • 2021-12-06
    • 2018-03-13
    • 1970-01-01
    • 1970-01-01
    • 2020-10-29
    • 1970-01-01
    相关资源
    最近更新 更多