指尖上的记忆指尖上的记忆
首页
  • 基础
  • Laravel框架
  • Symfony框架
  • 基础
  • Gin框架
  • 基础
  • Spring框架
  • 命令
  • Nginx
  • Ai
  • Deploy
  • Docker
  • K8s
  • Micro
  • RabbitMQ
  • Mysql
  • PostgreSsql
  • Redis
  • MongoDb
  • Html
  • Js
  • 前端
  • 后端
  • Git
  • 知识扫盲
  • Golang
🌟 gitHub
首页
  • 基础
  • Laravel框架
  • Symfony框架
  • 基础
  • Gin框架
  • 基础
  • Spring框架
  • 命令
  • Nginx
  • Ai
  • Deploy
  • Docker
  • K8s
  • Micro
  • RabbitMQ
  • Mysql
  • PostgreSsql
  • Redis
  • MongoDb
  • Html
  • Js
  • 前端
  • 后端
  • Git
  • 知识扫盲
  • Golang
🌟 gitHub

vue3下复制到剪贴板:

<template>
  <div class="font-normal flex">
    <!-- 链接容器 -->
    <div ref="linkText" class="max-w-[220px] overflow-hidden text-ellipsis whitespace-nowrap">
      https://github.com/gspgsp
    </div>
    <!-- 图标按钮 -->
    <MIcon name="content_copy" size="sm" @click="copyToClipboard" />
  </div>
</template>
  
<script setup lang=ts>
import { ref } from 'vue';
  
// 用于获取链接内容的 ref
const linkText = ref(null);
  
// 复制到剪贴板的方法
const copyToClipboard = () => {
  if (linkText.value) {
    // 获取链接的文本内容
    const textToCopy = linkText.value.textContent;
    // 使用 Clipboard API 复制文本
    navigator.clipboard.writeText(textToCopy)
      .then(() => {
        alert('链接已复制到剪贴板!');
      })
      .catch(err => {
        console.error('复制失败:', err);
      });
  }
};
</script>
  
分析:
navigator.clipboard.writeText 是 Web Clipboard API 的一部分,用于将文本写入用户的剪贴板。这是一个现代浏览器中提供的异步方法,可以安全、便捷地完成剪贴板操作。
  
参数
text: 要复制到剪贴板的字符串。
  
返回值
Promise<void>: 返回一个 Promise,表示复制操作的完成状态。
如果成功,Promise 会被解析。
如果失败,Promise 会被拒绝,并返回错误。
  
将上面的方法封装到utils里:
// /utils/clipboard.ts
export const copyToClipboard = async (text: string): Promise<boolean> => {
  try {
    await navigator.clipboard.writeText(text);
    return true;
  } catch (err: any) {
    console.error("copy failed:", err);
    return false;
  }
};
  
使用:
import { copyToClipboard } from '@/utils/clipboard';
  
const isToastVisible = ref(false);
const linkText = ref(null);
const handleCopy = async () => {
  if (linkText.value) {
    const textToCopy = linkText.value.textContent || "";
    const result = await copyToClipboard(textToCopy);
    if (result) {
      isToastVisible.value = true;
    }
  }
};
  
分析:
Promise<boolean> 是对一个 返回值类型为 boolean 的 Promise 的声明,表示函数是异步的,并且会返回一个带有 boolean 类型值的 Promise。
  
具体含义
Promise:
  
是 JavaScript 中表示异步操作结果的对象。
它的状态可以是 pending(进行中)、fulfilled(已成功) 或 rejected(已失败)。
boolean 类型:
  
这里 boolean 指定了 Promise 被 fulfilled(成功)时解析的值是 true 或 false。
如果 Promise 被 rejected(失败),它不会返回 boolean 值,而是进入 catch 块。
  
  
关于Promise拓展:
function getData(condition: boolean): Promise<string> {
  if (condition) {
    return Promise.resolve("Immediate response"); // 如果满足条件,直接返回完成的 Promise
  } else {
    return new Promise((resolve) => setTimeout(() => resolve("Delayed response"), 1000)); // 模拟异步
  }
}
  
// 使用
getData(true).then(console.log); // 输出: Immediate response
getData(false).then(console.log); // 1 秒后输出: Delayed response