首页 > 其他分享 >vuejs实现复制功能

vuejs实现复制功能

时间:2023-01-10 10:45:13浏览次数:38  
标签:el 功能 Vue textarea vuejs value 复制 directives copy

1、效果图

 

2、创建copyComm.js文件

import Vue from 'vue'; const vCopy = { // 名字爱取啥取啥     /*       bind 钩子函数,第一次绑定时调用,可以在这里做初始化设置       el: 作用的 dom 对象       value: 传给指令的值,也就是我们要 copy 的值     */     bind(el, { value }) {       el.$value = value; // 用一个全局属性来存传进来的值,因为这个值在别的钩子函数里还会用到       el.handler = () => {         if (!el.$value) {           // 值为空的时候,给出提示,我这里的提示是用的 ant-design-vue 的提示,你们随意           Vue.prototype.$message({ message:'无复制内容', type: 'warning' })           return;         }         // 动态创建 textarea 标签         const textarea = document.createElement('textarea');         // 将该 textarea 设为 readonly 防止 iOS 下自动唤起键盘,同时将 textarea 移出可视区域         textarea.readOnly = 'readonly';         textarea.style.position = 'absolute';         textarea.style.left = '-9999px';         // 将要 copy 的值赋给 textarea 标签的 value 属性         textarea.value = el.$value;         // 将 textarea 插入到 body 中         document.body.appendChild(textarea);         // 选中值并复制         textarea.select();         textarea.setSelectionRange(0, textarea.value.length);         const result = document.execCommand('Copy');         if (result) {           Vue.prototype.$message({ message: ‘复制成功’, type: 'success' })         }         document.body.removeChild(textarea);       };       // 绑定点击事件,就是所谓的一键 copy 啦       el.addEventListener('click', el.handler);     },     // 当传进来的值更新的时候触发     componentUpdated(el, { value }) {       el.$value = value;     },     // 指令与元素解绑的时候,移除事件绑定     unbind(el) {       el.removeEventListener('click', el.handler);     },   };   export default vCopy; 3、在建一个directives.js文件来注册所有的全局指令 import copy from './copyComm.js'; // 自定义指令 const directives = {   copy, }; // 这种写法可以批量注册指令 export default {   install(Vue) {     Object.keys(directives).forEach((key) => {       Vue.directive(key, directives[key]);     });   }, }; 4、在main.js注册 import Vue from 'vue'; import Directives from './directives'; Vue.use(Directives); 5、vue文件使用 <template>   <div>     <button v-copy="要复制的内容">拷贝</button>   </div> </template>   来源链接:https://www.php.cn/vuejs/483715.html

标签:el,功能,Vue,textarea,vuejs,value,复制,directives,copy
From: https://www.cnblogs.com/wangyan0926/p/17039406.html

相关文章