useClipboard
响应式的 Clipboard API。提供对剪贴板命令 (剪切、复制和粘贴) 的响应能力,以及异步读取和写入系统剪贴板的能力。访问剪贴板内容的权限受到 Permissions API 的限制。未经用户许可,不允许读取或更改剪贴板内容。
通过 Vue School 的这个免费视频课程学习如何使用 useClipboard 将文本响应式保存到剪贴板!示例
你的浏览器不支持剪贴板 API
使用方法
vue
<script>
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)">
<!-- 默认情况下,`copied` 将在 1.5 秒后重置 -->
<span v-if="!copied">复制</span>
<span v-else>已复制!</span>
</button>
<p>当前已复制的内容: <code>{{ text || 'none' }}</code></p>
</div>
<p v-else>
你的浏览器不支持 Clipboard API
</p>
</template>
如果 Clipboard API 不可用,设置 legacy: true
来保留复制的能力。它将使用 execCommand 作为回退处理复制。
组件使用
vue
<template>
<UseClipboard v-slot="{ copy, copied }" source="copy me">
<button @click="copy()">
{{ copied ? '已复制' : '复制' }}
</button>
</UseClipboard>
</template>
类型声明
typescript
export interface UseClipboardOptions<Source> extends ConfigurableNavigator {
/**
* 启用剪贴板读取
*
* @default false
*/
read?: boolean
/**
* 复制的数据源
*/
source?: Source
/**
* 重置 `copied` ref 状态的毫秒数
*
* @default 1500
*/
copiedDuring?: number
/**
* 如果剪贴板未定义,是否回退到 document.execCommand('copy')。
*
* @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>
}
/**
* 响应式 Clipboard API.
*
* @see https://vueuse.org/useClipboard
* @param options
*/
export declare function useClipboard(
options?: UseClipboardOptions<undefined>,
): UseClipboardReturn<false>
export declare function useClipboard(
options: UseClipboardOptions<MaybeRefOrGetter<string>>,
): UseClipboardReturn<true>
源码
贡献者
Anthony Fu
一纸忘忧
Anthony Fu
Jelf
Sanxiaozhizi
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.4.0
on 1/10/2025v12.3.0
on 1/2/202559f75
- feat(toValue): deprecate toValue
from @vueuse/shared
in favor of Vue's native6860f
- fix(useClipboard,useClipboardItems): avoid running "copied" timeout during initialization (#4299)v12.0.0-beta.1
on 11/21/2024v10.9.0
on 2/27/2024v10.6.0
on 11/9/2023v10.0.0-beta.4
on 4/13/20234d757
- feat(types)!: rename MaybeComputedRef
to MaybeRefOrGetter
0a72b
- feat(toValue): rename resolveUnref
to toValue