clipboard.js 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. /**
  2. * v-clipboard 文字复制剪贴
  3. * Copyright (c) 2021 awms
  4. */
  5. import Clipboard from 'clipboard'
  6. export default {
  7. bind(el, binding, vnode) {
  8. switch (binding.arg) {
  9. case 'success':
  10. el._vClipBoard_success = binding.value;
  11. break;
  12. case 'error':
  13. el._vClipBoard_error = binding.value;
  14. break;
  15. default: {
  16. const clipboard = new Clipboard(el, {
  17. text: () => binding.value,
  18. action: () => binding.arg === 'cut' ? 'cut' : 'copy'
  19. });
  20. clipboard.on('success', e => {
  21. const callback = el._vClipBoard_success;
  22. callback && callback(e);
  23. });
  24. clipboard.on('error', e => {
  25. const callback = el._vClipBoard_error;
  26. callback && callback(e);
  27. });
  28. el._vClipBoard = clipboard;
  29. }
  30. }
  31. },
  32. update(el, binding) {
  33. if (binding.arg === 'success') {
  34. el._vClipBoard_success = binding.value;
  35. } else if (binding.arg === 'error') {
  36. el._vClipBoard_error = binding.value;
  37. } else {
  38. el._vClipBoard.text = function () { return binding.value; };
  39. el._vClipBoard.action = () => binding.arg === 'cut' ? 'cut' : 'copy';
  40. }
  41. },
  42. unbind(el, binding) {
  43. if (!el._vClipboard) return
  44. if (binding.arg === 'success') {
  45. delete el._vClipBoard_success;
  46. } else if (binding.arg === 'error') {
  47. delete el._vClipBoard_error;
  48. } else {
  49. el._vClipBoard.destroy();
  50. delete el._vClipBoard;
  51. }
  52. }
  53. }