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

第一步 創建點擊對象頁面元素,並綁定業務數據。

<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();

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章