封装组件,通过指令进行调用,类似于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封装全局注册弹窗组件,实现全局调用。
前言 很多网站都会有权限控制,比如一些博客网站的评论系统,必须要用户登录后才能发起评论,如果未登录想要评论,网站则会弹出登录弹窗。这个登录弹窗可以任何需要权限的地方弹出,所以这个弹窗组件我们就必须封装为共有的,共全局调用。
1391 0
|
8天前
封装组件,通过指令进行调用,类似于elementUI中的loading组件
封装组件,通过指令进行调用,类似于elementUI中的loading组件
12 0
|
8月前
|
JavaScript
vue 循环加载动态组件以及传值
vue 循环加载动态组件以及传值
308 0
|
8月前
|
前端开发 JavaScript
React中Refs的作用是什么?如何使用,父组件是函数组件ref如何获取子组件内容
React中Refs的作用是什么?如何使用,父组件是函数组件ref如何获取子组件内容
148 0
ElementUI:组件库之Loading 加载
ElementUI:组件库之Loading 加载
334 0
|
JavaScript 容器
vue2 自定义全局Loading组件
主要用到了Vue 的构造器extend 他可以接受一个已有组件也可以自定义组件
370 0
|
前端开发 JavaScript 数据安全/隐私保护
如何使用React Hook创建可复用的表单组件
在本文中,我们将介绍React Hook的概念以及如何使用它们创建可复用的表单组件。通过这种方法,我们可以在应用程序中轻松地重用表单组件,并通过减少重复代码来提高代码的可维护性和可读性。 React是一个功能强大的JavaScript库,用于构建现代Web应用程序。React有许多功能,包括组件,它们是React应用程序的构建块。React Hook是React16.8引入的新特性,它们使得在函数组件中使用状态和其他React功能变得更加容易。
183 0
antd组件库封装31-自定义hook2
antd组件库封装31-自定义hook2
50 0
antd组件库封装31-自定义hook2
antd组件库封装32-自定义hook3
antd组件库封装32-自定义hook3
46 0
antd组件库封装32-自定义hook3
antd组件库封装39-hook规则
antd组件库封装39-hook规则
56 0
antd组件库封装39-hook规则