封装组件,通过指令进行调用,类似于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
      }
    })
  }
}
相关文章
vxe-table表格校验失败后保持可以编辑状态
vxe-table表格校验失败后保持可以编辑状态
vxe-table表格校验失败后保持可以编辑状态
|
JavaScript Python 内存技术
error C:\Users\Acer\Downloads\Desktop\hrsaas-84\node_modules\deasync: 莫名其妙报错一堆python问题
error C:\Users\Acer\Downloads\Desktop\hrsaas-84\node_modules\deasync: 莫名其妙报错一堆python问题
505 0
|
JavaScript 前端开发
el-upload上传文件
el-upload上传文件
1492 0
|
前端开发 UED 开发者
React 对话框组件 Dialog
本文详细介绍了如何在 React 中实现一个功能完备的对话框组件(Dialog),包括基本用法、常见问题及其解决方案,并通过代码案例进行说明。从安装依赖到创建组件、添加样式,再到解决关闭按钮失效、背景点击无效、键盘导航等问题,最后还介绍了如何添加动画效果和处理异步关闭操作。希望本文能帮助你在实际开发中更高效地使用 React 对话框组件。
544 75
Echarts中tooltip的 formatter用法
Echarts中tooltip的 formatter用法
734 0
|
安全 机器人 测试技术
宇树Unitree Z1机械臂使用教程
本文是宇树Unitree Z1机械臂的使用教程,包括建立机械臂通信、基本运行demo、ROS Gazebo仿真demo、键盘控制demo、手柄控制demo、moveit真实机械臂demo以及其他高级控制demo的详细步骤和注意事项。教程涵盖了软件安装、环境配置、代码下载、编译运行等内容,并提供了机械臂操作的实用技巧。
2314 1
|
自然语言处理 搜索推荐
在Elasticsearch 7.9.2中安装IK分词器并进行自定义词典配置
在Elasticsearch 7.9.2中安装IK分词器并进行自定义词典配置
1775 1
|
前端开发 Linux iOS开发
【Flutter前端技术开发专栏】Flutter在桌面应用(Windows/macOS/Linux)的开发实践
【4月更文挑战第30天】Flutter扩展至桌面应用开发,允许开发者用同一代码库构建Windows、macOS和Linux应用,提高效率并保持平台一致性。创建桌面应用需指定目标平台,如`flutter create -t windows my_desktop_app`。开发中注意UI适配、性能优化、系统交互及测试部署。UI适配利用布局组件和`MediaQuery`,性能优化借助`PerformanceLogging`、`Isolate`和`compute`。
1153 0
【Flutter前端技术开发专栏】Flutter在桌面应用(Windows/macOS/Linux)的开发实践
|
JavaScript
vue 代码高亮 highlight.js vue-highlightjs
vue 代码高亮 highlight.js vue-highlightjs
388 0
|
移动开发 定位技术 HTML5
HTML5的新语义化标签
HTML5的新语义化标签
453 0

热门文章

最新文章