从全局范围调用 Svelte 组件的函数

Pho*_*ixS 5 javascript google-signin svelte sapper

我正在创建一个 Sapper 页面,我想在其中使用Google Sign-in button。它需要data-onsuccess属性来指定回调函数。根据我从 Google 的平台 JS 库中发现的内容,它在 global/window范围内查找函数。

有没有办法从全局网页范围访问/调用 Svelte 的组件功能?它可能用于与无法直接加载import到组件中的外部库的互操作。

我正在尝试做的示例:

<script>
  function onSignComponent(user){
    console.log('Signed in');
  }
</script>

<div id="login" class="g-signin2" data-onsuccess="{onSignComponent}" data-theme="dark" />
Run Code Online (Sandbox Code Playgroud)

这项工作onSignComponent在全局范围内时有效,但在组件范围内时无效。

Ric*_*ris 10

最简单的方法是将函数放在window组件内部:

<script>
  window.onSignIn = user => {
    // ...
  };
</script>

<div id="login" class="g-signin2" data-onsuccess="onSignIn" data-theme="dark" />
Run Code Online (Sandbox Code Playgroud)

  • 哇,这真是简单得令人尴尬。我应该在尝试另一种解决方法(将 svelte 存储附加到窗口对象)时考虑到这一点。多谢! (3认同)

Ste*_*aes 8

一种方法是<svelte:window on:xxx>在组件中添加指令,然后在方法中onSignComponent引发此xxx事件。

在组件中

<svelte:window on:loginSuccess={loginSuccess}></svelte:window>
Run Code Online (Sandbox Code Playgroud)

别的地方

const myEvent = new CustomEvent('loginSuccess', { ... some object });
window.dispatchEvent(myEvent);
Run Code Online (Sandbox Code Playgroud)