Svelte 中的 Singleton

Cro*_*csx 7 svelte

我正在尝试制作一个 Svelte 应用程序,其中我有一个类(不是 svelte 组件)来创建音频源并管理它。

我想跨多个组件获取此类实例。

现在,我发现的唯一方法就是这样做:

<script lang="ts" context="module">
  import { AudioAnalyser } from "@app/class/audio/AudioAnalyser";
  import type { MediaAnalyser } from "@app/types/analyser";

    let analyser: MediaAnalyser = new AudioAnalyser();
</script>
Run Code Online (Sandbox Code Playgroud)

在组件内部,所以我确信只有一个实例,并通过属性绑定与其他组件共享该实例。

但我正在尝试找到一种方法,可以实例化此类一次并通过所有应用程序访问它,就像使用角度服务一样。

谢谢

Ste*_*aes 13

您可以在常规脚本文件中执行此操作,而不是在 svelte 组件中实例化它:

// analyser.ts
import { AudioAnalyser } from "@app/class/audio/AudioAnalyser";
import type { MediaAnalyser } from "@app/types/analyser";

const analyser: MediaAnalyser = new AudioAnalyser();

export default analyser
Run Code Online (Sandbox Code Playgroud)

现在您只需将其导入到任何需要的地方即可:

<script>
  import analyser from './analyser.ts'
</script>
Run Code Online (Sandbox Code Playgroud)

实例化只会发生一次。