封装组件,通过指令进行调用,类似于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
      }
    })
  }
}
相关文章
|
JavaScript 数据安全/隐私保护
Vue封装全局注册弹窗组件,实现全局调用。
前言 很多网站都会有权限控制,比如一些博客网站的评论系统,必须要用户登录后才能发起评论,如果未登录想要评论,网站则会弹出登录弹窗。这个登录弹窗可以任何需要权限的地方弹出,所以这个弹窗组件我们就必须封装为共有的,共全局调用。
1563 0
|
3月前
|
JavaScript
Vue组件传值异步问题--子组件拿到数据较慢
Vue组件传值异步问题--子组件拿到数据较慢
254 58
|
7月前
|
JavaScript
Vue父组件调用子组件的方法并传参的两种方式(用$refs.refName.functionName、window.function)
Vue父组件调用子组件的方法并传参的两种方式(用$refs.refName.functionName、window.function)
Vue父组件调用子组件的方法并传参的两种方式(用$refs.refName.functionName、window.function)
|
7月前
|
JavaScript
Vue.js 中父组件调用子组件的方法
Vue.js 中父组件调用子组件的方法
147 2
|
JavaScript
vue父组件调用子组件方法
vue父组件调用子组件方法
81 0
vue3.2中setup语法糖父组件如何调用子组件中的方法
vue3.2中setup语法糖父组件如何调用子组件中的方法
vue3.2中setup语法糖父组件如何调用子组件中的方法
|
JavaScript
vue子组件调用父组件方法
vue子组件调用父组件方法
100 0
|
JavaScript
vue 循环加载动态组件以及传值
vue 循环加载动态组件以及传值
503 0
|
前端开发 JavaScript
React中Refs的作用是什么?如何使用,父组件是函数组件ref如何获取子组件内容
React中Refs的作用是什么?如何使用,父组件是函数组件ref如何获取子组件内容
202 0
|
JavaScript
【Vue】子组件调用父组件的方法——案例
【Vue】子组件调用父组件的方法——案例
152 0

热门文章

最新文章