96SEO 2026-09-20 20:18 4
Meta description: 从 src/directives/copy.ts 出发。详解如何用 VueUse useClipboard + Element Plus 虚拟 Tooltip 实现带成功反馈的 v-copy 指令,并处理 Clipboard API 兼容与资源清理。老实说,
在后台程序里「复制订单号」「复制链接」几乎无处不在。只要写三行 navigator.clipboard.writeText 就能完成复制。但点击后往往没有任何反馈——不知道有没有成功,也不知道到底复制了什么。再看而且,
src/directives/copy.ts 出发,拆解一套「点哪复制哪、成功有提示、卸载不泄漏」的指令方案。

把「解析 source → 写入剪贴板 → 显示成功反馈 → 清理副作用」收敛到一处。让模板只需:
{{ orderNo }}
项目通过 @unplugin-auto-import 自动注册所有指令,无需手动 import。
flowchart LR
A --> B
B --> C
C --> D
D --> E
E --> F
每个绑定元素在 mounted 时创建 CopyContext,并存入 WeakMap:
interface CopyContext {
container?: HTMLElement
vm?的观点是,VNode
binding: DirectiveBinding
onClick: => void
stopWatcher?: WatchStopHandle
copied?说起来,: boolean
}
const contextMap = new WeakMap
...
beforeUnmount {
const ctx = contextMap.get!el.removeEventListener
clean
contextMap.delete
}
function clean {
ctx.stopWatcher?.
if { render;ctx.container.remove }
ctx.vm = undefined
}
至于使用,
const { copy,copied } = useClipboard
copy
...
如果 Clipboard API 不可用,会回退到 document.execCommand;copied 为响应式布尔值,用于驱动 UI。
关键 props:
h(ElTooltip,{
virtualTriggering:true,virtualRef:el。placement:'top',effect:'light',visible:false,...options
},{
content:=> h('div',{class:'flex items-center gap- text-success'},)
})
...
watch=> {
vm?.component,.exposed?.,.
})
...
因为虚拟触发不会渲染 trigger 子节点,保持原始 DOM 层级;success 内容通过离屏 div 渲染,并继承当前应用上下文。
// @unocss-include
import type { UseClipboardOptions } from '@vueuse/core'
import type { UseTooltipProps } from 'element-plus'
import type { Directive。WatchStopHandle } from 'vue'
import { ElTooltip } from 'element-plus'
import { isPlainObject } from 'lodash-es'
import { render } from 'vue'
interface CopyOptions extends UseClipboardOptions
type CopyValue = MaybeRef
interface CopyContext{
container?: HTMLElement
从vm?来看,VNode
binding: DirectiveBinding
const contextMap=new WeakMap
const parseBinding==>{ ... }
const clean==>{ ... }
const handleClick==>{ ... }
export const vCopy:{mounted:=>void。updated:=>void,beforeUnmount:=>void}={ mounted{...},updated{...},beforeUnmount{...} }
="" label='"订单号"' prop='"orderNo">' row="" row.orderno="" span="" v-copy='"row.orderNo"' }">="" }}="">
\t
点击即可复制,无需额外函数。其实,
省略 value 时指令回退到 element.textContent:
适用于所见即所复制。
{{ email }}
成功提示里的
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback