前端技術之:如何在Vue中使用clipboard.js複製服務端資料

liuchunrong發表於2019-10-31

第一步 建立點選物件頁面元素,並繫結業務資料。

<el-button type="text" size="mini" class="copy-button"
  :data-resource-type="scope.data.resource\_type"
  :data-resource-id="scope.data.resource\_id">
  複製連結
</el-button>

第二步 引入clipboard.js。

import ClipboardJS from 'clipboard';

第三步 建立ClipboardJS物件例項。


mounted() {
  this.clipboard = new ClipboardJS('.copy-button', {
    text: () => this.copyLink
  });
  ...
}

第四步:替換clipboard物件例項的預設的onClick事件。

mounted() {
  ...
  const that = this;
  const oldOnClick = this.clipboard.onClick;
  this.clipboard.onClick = function onClick(e) {
    const resource\_type = e.delegateTarget.getAttribute('data-resource-type');
    const resource\_id = e.delegateTarget.getAttribute('data-resource-id');
    console.log('resource\_type, resource\_id is', resource\_type, resource\_id)
    that.$axios
      .post(APIS.Link, {
        type: 'h5\_ugc\_detail',
        params: {ugc\_id: resource\_id, ugc\_type: resource\_type},
        \_csrf: that.$store.state.csrfToken
      })
      .then(res => {
        that.copyLink = res.data.data.link;
        oldOnClick.bind(that.clipboard)(e);
      })
      .catch(err => {
      });
  };
  ...
}

第五步:監聽並處理操作成功與失敗事件。

mounted() {
  ...
  this.clipboard.on('success', this.clipOptions.success);
  this.clipboard.on('error', this.clipOptions.error);
}

其中clipOptions類似如下:

computed: {
  clipOptions() {
    return {
      success: (e) => {
        this.$message.success('複製成功');
      },
      error: () => {
        this.$message.error('複製失敗');
      }
    };
  },
  ...
}

第六步:vue生命週期結束時,銷燬clipboard物件。

unmounted() {
  this.clipboard && this.clipboard.destroy();
}

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69949941/viewspace-2662040/,如需轉載,請註明出處,否則將追究法律責任。

相關文章