在 Svelte 3 中访问生成的自定义元素

Pau*_*aul 1 svelte svelte-component

我正在使用 Svelte 3 和使用 Shadow DOM 生成自定义元素的选项,但我不知道如何获取对包装器自定义元素 (HTMLElement) 的引用,以便我可以附加事件处理程序和操作属性。我有这样的事情:

<svelte:options tag="custom-button"/>

<script>
    import { onMount } from 'svelte';

    function _onClick(e) {
        this.setAttribute('pressed', null);
    }

    var _boundClick = _onClick.bind(this);

    onMount((e) => {
        this.addEventListener('click', _boundClick);

        return () => {
            this.removeEventListener('click', _boundClick);
        };
    });
</script>

<style>
  :host {
    display: block;
  }

  /* Other Styling */
</style>

<slot></slot>
Run Code Online (Sandbox Code Playgroud)

“this”位不起作用(它们在普通的香草自定义元素中起作用)。是否有一些 Svelte 特定的方法来获取对脚本中宿主元素的引用?

谢谢

Ric*_*ris 8

目前,这还不能直接实现,尽管这将是一个值得的补充。我刚刚提出了一个问题

间接方法是bind:this={element}在自定义元素内的顶级元素上执行(假设你有一个),然后你可以做一些很长的$: host = element && element.parentNode.host. 初始化时您将无法访问它,但它会在onMount.