跳到主要内容

useClipboard

类别
导出大小
1.35 kB
最后更改
5 天前
相关

响应式 Clipboard API。提供响应剪贴板命令(剪切、复制和粘贴)以及异步读取和写入系统剪贴板的能力。对剪贴板内容的访问受 Permissions API 限制。未经用户许可,不允许读取或更改剪贴板内容。

通过 Vue School 的免费视频课程,学习如何响应式地将文本保存到剪贴板!

演示

您的浏览器不支持 Clipboard API

用法

vue
<script setup lang="ts">
import { useClipboard } from '@vueuse/core'

const source = ref('Hello')
const { text, copy, copied, isSupported } = useClipboard({ source })
</script>

<template>
  <div v-if="isSupported">
    <button @click="copy(source)">
      <!-- by default, `copied` will be reset in 1.5s -->
      <span v-if="!copied">Copy</span>
      <span v-else>Copied!</span>
    </button>
    <p>Current copied: <code>{{ text || 'none' }}</code></p>
  </div>
  <p v-else>
    Your browser does not support Clipboard API
  </p>
</template>

设置 legacy: true 以在 Clipboard API 不可用时保持复制能力。它将使用 execCommand 作为后备处理复制。

组件用法

此函数还通过 @vueuse/components 包提供无渲染组件版本。 了解更多关于用法的信息

vue
<template>
  <UseClipboard v-slot="{ copy, copied }" source="copy me">
    <button @click="copy()">
      {{ copied ? 'Copied' : 'Copy' }}
    </button>
  </UseClipboard>
</template>

类型声明

显示类型声明
typescript
export interface UseClipboardOptions<Source> extends ConfigurableNavigator {
  /**
   * Enabled reading for clipboard
   *
   * @default false
   */
  read?: boolean
  /**
   * Copy source
   */
  source?: Source
  /**
   * Milliseconds to reset state of `copied` ref
   *
   * @default 1500
   */
  copiedDuring?: number
  /**
   * Whether fallback to document.execCommand('copy') if clipboard is undefined.
   *
   * @default false
   */
  legacy?: boolean
}
export interface UseClipboardReturn<Optional> {
  isSupported: ComputedRef<boolean>
  text: ComputedRef<string>
  copied: ComputedRef<boolean>
  copy: Optional extends true
    ? (text?: string) => Promise<void>
    : (text: string) => Promise<void>
}
/**
 * Reactive Clipboard API.
 *
 * @see https://vueuse.org.cn/useClipboard
 * @param options
 */
export declare function useClipboard(
  options?: UseClipboardOptions<undefined>,
): UseClipboardReturn<false>
export declare function useClipboard(
  options: UseClipboardOptions<MaybeRefOrGetter<string>>,
): UseClipboardReturn<true>

源码

SourceDemoDocs

贡献者

Anthony Fu
Anthony Fu
Jelf
Sanxiaozhizi
IlyaL
Бєляєв Віталій
Robin
Fernando Fernández
Alex Liu
Indrek Ardel
Mr.Hope
Alexzvn
Cat1007
丶远方
Olusola Olawale
Lumdzeehol
Lumdzeehol
Curt Grimes
wheat
洪布斯
karma
Shinigami
Alex Kozack
Antério Vieira

更新日志

v12.8.0 于 2025/3/5
7432f - feat(types): 弃用 MaybeRefMaybeRefOrGetter,使用 Vue 原生的 (#4636)
a54c4 - fix: 修复读取权限提示时的未处理拒绝问题 (#4615)
v12.5.0 于 2025/1/22
01acd - feat: 当读取/写入失败时,应回退到旧版剪贴板 (#4512)
v12.4.0 于 2025/1/10
dd316 - feat: 在所有可能的地方使用被动事件处理程序 (#4477)
v12.3.0 于 2025/1/2
59f75 - feat(toValue): 弃用来自 @vueuse/sharedtoValue,使用 Vue 原生的
6860f - fix(useClipboard,useClipboardItems): 避免在初始化期间运行 “copied” 超时 (#4299)
v12.0.0-beta.1 于 2024/11/21
0a9ed - feat!: 删除 Vue 2 支持,优化捆绑包并清理 (#4349)
v10.9.0 于 2024/2/27
a9f02 - fix: 修复未定义权限时的问题 (#3812)
v10.6.0 于 2023/11/9
71b46 - feat: UseClipboard 组件 (#3359)
37e86 - fix: 在没有权限时使用旧方法 (#3379)
v10.0.0-beta.4 于 2023/4/13
4d757 - feat(types)!: 将 MaybeComputedRef 重命名为 MaybeRefOrGetter
0a72b - feat(toValue): 将 resolveUnref 重命名为 toValue

根据 MIT 许可证发布。