封装组件,通过指令进行调用,类似于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封装全局注册弹窗组件,实现全局调用。
前言 很多网站都会有权限控制,比如一些博客网站的评论系统,必须要用户登录后才能发起评论,如果未登录想要评论,网站则会弹出登录弹窗。这个登录弹窗可以任何需要权限的地方弹出,所以这个弹窗组件我们就必须封装为共有的,共全局调用。
1406 0
|
6天前
|
JavaScript
Vue.js 中父组件调用子组件的方法
Vue.js 中父组件调用子组件的方法
42 2
|
9月前
|
JavaScript 前端开发 开发者
vue封装单文件弹窗组件
  VUE想要实现一个普通弹窗,想必对于大部分前端开发者来说实现起来都是非常简单一件事情,但是如果说要封装某一个具体需求效果,可能就难倒不少同学 ,由此可见 从实现到封装这个过程是非常考验个人能力的!
89 0
|
9月前
|
JavaScript
vue 循环加载动态组件以及传值
vue 循环加载动态组件以及传值
318 0
|
9月前
|
前端开发 JavaScript
React中Refs的作用是什么?如何使用,父组件是函数组件ref如何获取子组件内容
React中Refs的作用是什么?如何使用,父组件是函数组件ref如何获取子组件内容
157 0
|
11月前
|
JavaScript 前端开发
【Vue3 第二十章】异步组件 & 代码分包 & Suspense内置组件 & 顶层 await
【Vue3 第二十章】异步组件 & 代码分包 & Suspense内置组件 & 顶层 await
203 1
ElementUI:组件库之Loading 加载
ElementUI:组件库之Loading 加载
342 0
|
前端开发 JavaScript 数据安全/隐私保护
如何使用React Hook创建可复用的表单组件
在本文中,我们将介绍React Hook的概念以及如何使用它们创建可复用的表单组件。通过这种方法,我们可以在应用程序中轻松地重用表单组件,并通过减少重复代码来提高代码的可维护性和可读性。 React是一个功能强大的JavaScript库,用于构建现代Web应用程序。React有许多功能,包括组件,它们是React应用程序的构建块。React Hook是React16.8引入的新特性,它们使得在函数组件中使用状态和其他React功能变得更加容易。
185 0
vue3.2中setup语法糖父组件如何调用子组件中的方法
vue3.2中setup语法糖父组件如何调用子组件中的方法
vue3.2中setup语法糖父组件如何调用子组件中的方法