怎么在Vue中通过自定义指令实现一个一键 Copy功能

发布时间:2021-04-19 17:24:43 作者:Leah
来源:亿速云 阅读:252

怎么在Vue中通过自定义指令实现一个一键 Copy功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

Vue的优点

Vue具体轻量级框架、简单易学、双向数据绑定、组件化、数据和结构的分离、虚拟DOM、运行速度快等优势,Vue中页面使用的是局部刷新,不用每次跳转页面都要请求所有数据和dom,可以大大提升访问速度和用户体验。

自定义指令

顾名思义就是自己定义的指令啦,可以实现我们想要的功能。下面就实现一个 一键 Copy 的功能吧。

生命周期

首先简单瞟一下指令的语法,每个指令都有自己的生命周期,看到生命周期,肯定会想到钩子函数,没错,指令也提供了钩子函数:

下面再简单瞟一眼上述钩子函数的参数哈:

看起来还挺多的,不过别方,其实常用的就几个。好了下面要开始表演了:

首先建一个 js 文件(v-copy.js)。定义一个对象。( 指令实际就是一个对象 )

import { Message } from 'ant-design-vue';

const vCopy = { // 名字爱取啥取啥
 /*
  bind 钩子函数,第一次绑定时调用,可以在这里做初始化设置
  el: 作用的 dom 对象
  value: 传给指令的值,也就是我们要 copy 的值
 */
 bind(el, { value }) {
  el.$value = value; // 用一个全局属性来存传进来的值,因为这个值在别的钩子函数里还会用到
  el.handler = () => {
   if (!el.$value) {
   // 值为空的时候,给出提示,我这里的提示是用的 ant-design-vue 的提示,你们随意
    Message.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) {
    Message.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;

到这里,一键 Copy 的功能就实现了,最后再说一嘴怎么将自定义指令注册到全局:再新建一个 js ( directives.js )文件来注册所有的全局指令。

import copy from './v-copy';
// 自定义指令
const directives = {
 copy,
};
// 这种写法可以批量注册指令
export default {
 install(Vue) {
  Object.keys(directives).forEach((key) => {
   Vue.directive(key, directives[key]);
  });
 },
};

最后,在 main.js 中这样引入:

import Vue from 'vue';
import Directives from './directives';

Vue.use(Directives);

最后的最后,说一下怎么用吧。。

<template>
 <button v-copy="copyText">copy</button>
</template>

<script>
export default {
 data() {
  return {
   copyText: '要 Copy 的内容',
  };
 },
};
</script>

看完上述内容,你们掌握怎么在Vue中通过自定义指令实现一个一键 Copy功能的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

推荐阅读:
  1. 怎么在vue中利用自定义指令实现一个拖拽功能
  2. 怎么在微信小程序中实现一个一键复制功能

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

vue copy

上一篇:如何在微信小程序中实现一个左滑删除功能

下一篇:使用javascript怎么合并两个数组

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》