一键复制功能


前言

遇到一个一键复制的功能需求,大概有三种方式,大家一起来看看吧。


一、navigator.clipboard.writeText()

最开始使用navigator.clipboard.writeText('内容') ,在本地没有问题,但是部署到服务器上面就不行了,报错内容Error in v-on handler: "TypeError: Cannot read properties of undefined (reading 'writeText') 然后我就换第二种方式了。

二、document.execCommand()

官网:已弃用: 不再推荐使用该特性。虽然一些浏览器仍然支持它,但也许已从相关的 web 标准中移除,也许正准备移除或出于兼容性而保留。请尽量不要使用该特性,并更新现有的代码;参见本页面底部的兼容性表格以指导你作出决定。请注意,该特性随时可能无法正常工作。
但是还是可以用的,我现在用的就是这个。看一下示例代码:

<template>
  <el-table
    :data="tableData"
    @row-dblclick="copyCellContent"
  >
    <el-table-column
      prop="name"
      label="姓名"
    ></el-table-column>
    <el-table-column
      prop="age"
      label="年龄"
    ></el-table-column>
  </el-table>
</template>

<script>
export default {
  data() {
    return {
      tableData: [
        { name: '张三', age: 20 },
        { name: '李四', age: 25 },
        { name: '王五', age: 30 }
      ]
    };
  },
  methods: {
    copyCellContent(row, column) {
      const cellContent = row[column.property];
      const tempInput = document.createElement('input');
      tempInput.value = cellContent;
      document.body.appendChild(tempInput);
      tempInput.select();
      document.execCommand('copy');
      document.body.removeChild(tempInput);
      this.$message({
        message: '已复制单元格内容',
        type: 'success'
      });
    }
  }
};
</script>

三、vue-clipboard2插件

1.安装

npm install vue-clipboard2 --save

2.引入并使用 vue-clipboard2

import Vue from 'vue'
import VueClipboard from 'vue-clipboard2'

Vue.use(VueClipboard)

3.示例代码

<template>
  <div>
    <el-table
      :data="tableData"
    >
      <el-table-column
        prop="name"
        label="姓名"
      >
        <template slot-scope="{ row }">
          <span v-clipboard:copy="row.name" @success="handleCopySuccess">复制</span>
        </template>
      </el-table-column>
      <el-table-column
        prop="age"
        label="年龄"
      ></el-table-column>
    </el-table>
  </div>
</template>

<script>
export default {
  data() {
    return {
      tableData: [
        { name: '张三', age: 20 },
        { name: '李四', age: 25 },
        { name: '王五', age: 30 }
      ]
    };
  },
  methods: {
    handleCopySuccess() {
      this.$message({
        message: '已复制到剪贴板',
        type: 'success'
      });
    }
  }
};
</script>


总结

学海无涯哇!!!
[不想加班]

GitHub 加速计划 / vu / vue
207.54 K
33.66 K
下载
vuejs/vue: 是一个用于构建用户界面的 JavaScript 框架,具有简洁的语法和丰富的组件库,可以用于开发单页面应用程序和多页面应用程序。
最近提交(Master分支:2 个月前 )
73486cb5 * chore: fix link broken Signed-off-by: snoppy <michaleli@foxmail.com> * Update packages/template-compiler/README.md [skip ci] --------- Signed-off-by: snoppy <michaleli@foxmail.com> Co-authored-by: Eduardo San Martin Morote <posva@users.noreply.github.com> 4 个月前
e428d891 Updated Browser Compatibility reference. The previous currently returns HTTP 404. 5 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐