Loading 加载中

Loading 组件本质上是 Toast 组件的特殊用法。

注意:Loading 提示默认使用了 ShowToastOption.keepOpen: true。此设置会尝试阻止用户点击浏览器返回按钮,或使用返回手势。

示例

引用 Toast 组件

您需要在 /src/routes/+layout.svelte 文件中引用 Toast 组件。

<script lang="ts">
  import '../app.css'

  import { Toast } from 'sun-parakeet'

  let { children } = $props()
</script>

{@render children?.()}

<Toast />

异步请求

使用 showLoading 和 hideLoading 函数,您可以非常便捷地将 Loading 控制与异步传输过程结合。

注意:showLoading 和 hideLoading 必须成对调用

<script lang="ts">
  async function loading(option?: ShowLoadingOption, duration: number = 2000) {
    showLoading(option)

    try {
      await delay(duration)
    } finally {
      hideLoading()
    }
  }
</script>

基础用法

<Button onclick={() => loading()}>提交</Button>

自定义

<Button onclick={() => loading({ text: '提交中...' })}>说明文字</Button>
<Button onclick={() => loading({ text: '提交中...', icon: 'loader' })}
  >自定义图标</Button
>

并行执行

<Button
  onclick={() => {
    Promise.all([
      loading({ text: '加载中...' }, 1000),
      loading({ text: '加载中...' }, 2000),
      loading({ text: '加载中...' }, 3000),
    ])
  }}>加载</Button
>

注意:在上面的代码中,无论哪个异步过程率先完成,Loading 提示都会保持打开状态,直到所有的异步过程都执行完毕。

Loading

函数定义

/**
 * 显示 Loading Toast
 * @param option 配置
 */
async function showLoading(option?: ShowLoadingOption): void
/**
 * 关闭 Loading Toast
 * @param force 强制关闭
 */
function hideLoading(force: boolean = false) void

ShowToastOption

属性 说明 类型 默认值
icon 更改图标。提供 string 类型表示图标名称,详见 Icon 组件。 string | IconOption 默认的加载图标
text 提示文本 string undefined