index.js 1021 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. import Vue from 'vue'
  2. import pageLoading from './loading.vue'
  3. const Mask = Vue.extend(pageLoading)
  4. const toggleLoading = (el, binding) => {
  5. // el拿到loading挂载的元素,binding.value判断是否显示loading
  6. if (binding.value) {
  7. Vue.nextTick(() => {
  8. el.instance.loadingShow = true
  9. insertDom(el, el, binding)
  10. })
  11. } else {
  12. el.instance.loadingShow = false
  13. }
  14. }
  15. const insertDom = (parent, el) => {
  16. parent.appendChild(el.mask)
  17. }
  18. export default {
  19. bind: function (el, binding) {
  20. const mask = new Mask({
  21. el: document.createElement('div'),
  22. data () { }
  23. })
  24. el.instance = mask
  25. el.mask = mask.$el
  26. el.maskStyle = {
  27. position: 'relation'
  28. }
  29. el.style.position = 'relative'
  30. binding.value && toggleLoading(el, binding)
  31. },
  32. update: function (el, binding) {
  33. if (binding.oldValue !== binding.value) {
  34. toggleLoading(el, binding)
  35. }
  36. },
  37. unbind: function (el, binding) {
  38. el.instance && el.instance.$destroy()
  39. el = null
  40. }
  41. }