自定义指令-花瓣加载组件


花瓣效果如下,当然是一直转动的

 目录结构

src目录下新增directive目录,用来存放自定义指令

 新建loading目录,里面存放如下文件index.js    loadingComponent 文件夹

 loadingComponent 里面存放如下文件 index.js  loadingComponent .vue(加载组件)

 loadingComponent .vue



 loadingComponent/index.js

import Vue from 'vue'
import Loading from './LoadingComponent.vue'

const Mask = Vue.extend(Loading)

const toggleLoading = (el, binding) => {
  if (binding.value) {
    Vue.nextTick(() => {
      // 控制loading组件显示
      el.instance.visible = true
      // 插入到目标元素
      insertDom(el, el,)
    })
  } else {
    el.instance.visible = false
  }
}

const insertDom = (parent, el) => {
  parent.appendChild(el.mask)
}

export default {
  bind: function (el, binding, vnode) {
    const mask = new Mask({
      el: document.createElement('div'),
      data () {}
    })
    el.instance = mask
    el.mask = mask.$el
    el.maskStyle = {}
    binding.value && toggleLoading(el, binding)
  },
  update: function (el, binding) {
    if (binding.oldValue !== binding.value) {
      toggleLoading(el, binding)
    }
  },
  unbind: function (el, binding) {
    el.instance && el.instance.$destroy()
  }
}
import Vue from 'vue';
import Loading from './loadingComponent'
export default {
  install(Vue) {
    Vue.directive('myLoading', Loading)
  }
}

以上操作完成后再main.js里面引入

main.js

import DirectiveLoading from '@/directive/loading' //权限控制指令
Vue.use( DirectiveLoading )

页面上的使用v-myLoading

 效果如下:

 具体的模板自己修改为喜欢的样式即可。

 

vue