clipboard.js 1.4 KB

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