封装组件,通过指令进行调用,类似于elementUI中的load

2021-05-19  本文已影响0人  Mong

封装组件,通过指令进行调用,类似于elementUI中的loading组件

step1:搭建组件
<template>
  <div v-show="show" class="comp_loading" :style="{background: background}">
    <div class="loading_cont loading_fullscreen">
      <SvgIcon icon-class="loading" class="loading_icon"></SvgIcon>
    </div>
  </div>
</template>

<script>
  import SvgIcon from '@/components/SvgIcon'
  export default {
    name: "loading",
    components:{ SvgIcon },
    props:{
      show : Boolean ,
      background : String
    }
  }
</script>
step2:在组件同级文件夹下创建index.js文件,作为组件调用配置
import Vue from 'vue'
import LoadingComponent from './loading'

let instance;
const loadingConstructor = Vue.extend(LoadingComponent);

instance = new loadingConstructor({
  el:document.createElement('div')
});

instance.show = false;

const loading = {
  show(options){
    instance.show = true;
    instance.background = options && options.background;
    document.body.appendChild(instance.$el);
  },
  close(){
    instance.show = false;
  }
};

export default {
  install(options = {}){
    if(!Vue.loading){
      Vue.$loading = loading;
    }
    Vue.mixin({
      created() {
        this.$loading = Vue.$loading;
      }
    })
  }
}

这里的设置实际上就是变相的利用install方法把loading指令挂载到页面上,这样全局都可以直接使用this.$loading进行调用

step3:全局挂载

在main.js中进行全局引用

import loading from './components/Loading'
Vue.use(loading);
至此,就可以全局引用loading组件
this.$loading.show({background:'transparent'});
 //调用loading 打开 background为其中配置样式,根据自己需求进行配置即可

或者

this.$loading.close(); // 调用loading 关闭
上一篇下一篇

猜你喜欢

热点阅读