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

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

封装组件,通过指令进行调用,类似于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 关闭

封装element自带的loading


import Vue from 'vue'
import { Loading } from 'element-ui'
let loadingInstance = null
const loading = {
  show(options) {
    loadingInstance = Loading.service({ text: '加载中', 'background': 'hsla(0,0%,100%,.7)' })
  },
  close() {
    if (loadingInstance) {
      loadingInstance.close()
    }
  }
}

export default {
  install(options = {}) {
    if (!Vue.loading) {
      Vue.$loading = loading
    }
    Vue.mixin({
      created() {
        this.$loading = Vue.$loading
      }
    })
  }
}
相关文章
|
6月前
VUE3(三十九)自定义loading组件~
VUE3(三十九)自定义loading组件~
392 0
|
2月前
|
JavaScript
Vue组件传值异步问题--子组件拿到数据较慢
Vue组件传值异步问题--子组件拿到数据较慢
224 58
|
1月前
|
人工智能 JavaScript 程序员
vue中内置指令v-model的作用和常见使用方法介绍以及在自定义组件上支持
vue中内置指令v-model的作用和常见使用方法介绍以及在自定义组件上支持
136 0
|
3月前
|
JavaScript 数据安全/隐私保护
如何在Vue组件中调用封装好的外部js文件方法
这篇文章介绍了如何在Vue组件中调用封装好的外部js文件方法,包括在Vue项目中全局引入外部js文件,并在组件中通过this.$myMethod()的方式调用外部js文件中定义的方法。
如何在Vue组件中调用封装好的外部js文件方法
|
6月前
|
JavaScript
Vue.js 中父组件调用子组件的方法
Vue.js 中父组件调用子组件的方法
136 2
vue3.2中setup语法糖父组件如何调用子组件中的方法
vue3.2中setup语法糖父组件如何调用子组件中的方法
vue3.2中setup语法糖父组件如何调用子组件中的方法
|
前端开发 JavaScript
React中Refs的作用是什么?如何使用,父组件是函数组件ref如何获取子组件内容
React中Refs的作用是什么?如何使用,父组件是函数组件ref如何获取子组件内容
197 0
antd组件库封装31-自定义hook2
antd组件库封装31-自定义hook2
69 0
antd组件库封装31-自定义hook2
antd组件库封装32-自定义hook3
antd组件库封装32-自定义hook3
71 0
antd组件库封装32-自定义hook3
antd组件库封装39-hook规则
antd组件库封装39-hook规则
66 0
antd组件库封装39-hook规则
下一篇
无影云桌面