vue3.x全局$toast、$message、$loading等js插件
有时候我们需要使用一些类似toast,messge、loading这些跟js交互很频繁的插件,vue3.x这类插件的定义跟vue2.x插件稍大,而且相对变得复杂了一点点。
第一种、需要时创建,用完移除
这种做法相对损耗性能,当一些显示隐藏频率不是特别高的插件可以如此封装。
1、新建loading.vue文件
<template>
<div class="loading">
加载中...
</div>
</template>
<script>
export default {
name: "loading",
}
</script>
<style scoped>
.loading {
position: fixed;
left: 50%;
top: 50%;
background-color: rgba(0, 0, 0, 0.2);
color: white;
transform: translate(-50%, -50%);
border-radius: 4px;
padding: 8px 10px;
}
</style>
2、同级目录新建index.js文件
import { createApp } from "vue"
import Loading from './loading.vue'
export default {
instance: null,
parent: null,
times: 0,
// 为了保证多个同时loading的时候,只显示一个,并且需要全部close之后才消失
open() {
if (this.times == 0) {
this.instance = createApp(Loading)
this.parent = document.createElement("div")
let appDom = document.getElementById('app')
appDom.appendChild(this.parent)
this.instance.mount(this.parent)
}
this.times ++
},
close() {
this.times --
if (this.times <= 0) {
this.times = 0
let appDom = document.getElementById('app')
this.instance.unmount(this.parent)
appDom.removeChild(this.parent)
}
}
};
3、插件全局引入
import loading from '@/components/loading/index'
app.config.globalProperties.$loading = loading;
当然步骤2可以抛出install函数,然后main.js里面用use来全局载入。这样使用会导致我们不能使用this的地方不太好调用loading。
4、组件内使用
this.$loading.open()
setTimeout(() => {
this.$loading.close()
}, 2000)
第二种,一直存在,只控制显示隐藏
1、新建loading.vue文件
<template>
<div class="loading" v-show="visible">
加载中...
</div>
</template>
<script>
export default {
name: "loading",
data() {
return {
visible: false
};
},
methods: {
show() {
this.visible = true
},
hide() {
this.visible = false
}
}
}
</script>
<style scoped>
.loading {
position: fixed;
left: 50%;
top: 50%;
background-color: rgba(0, 0, 0, 0.2);
color: white;
transform: translate(-50%, -50%);
border-radius: 4px;
padding: 8px 10px;
}
</style>
2、同级目录新建index.js文件
import { createApp } from "vue"
import Loading from './loading.vue'
export default {
loading: null,
install(Vue) {
if (this.loading) {
// 防止多次载入
Vue.config.globalProperties.$loading = this.loading;
return ;
}
let instance = createApp(Loading);
let parent = document.createElement("div")
let bodyDom = document.body
// 这里需要注意,大概率app还没有mount,导致获取不到app节点,所以想挂载到app上,需要保证app已经创建。
bodyDom.appendChild(parent)
this.loading = instance.mount(parent)
Vue.config.globalProperties.$loading = this.loading;
}
};
3、插件全局引入
import Loading from '@/components/loading/index'
app.use(Loading)
4、组件内使用
this.$loading.show()
setTimeout(() => {
this.$loading.hide()
}, 2000)
vue3.x全局$toast、$message、$loading等js插件的更多相关文章
- H5页面基于iScroll.js插件实现下拉刷新,上拉加载更多
前言 在我之前的项目中,页面总是干巴巴的,用户的体验不是特别完美,我也是一直觉得把设计师给到的psd做出来就好,很少考虑用户的感受.我喜欢看不同的App,操作每个步骤,观赏每个能和我互动的交互设计效果 ...
- js插件---图片懒加载lazyload
js插件---图片懒加载lazyload 一.总结 一句话总结:使用异常简单,src里面放加载的图片,data-original里面放原图片,不懂的位置去官网或者github找API就好. 1.laz ...
- js插件---Amaze UI dialog如何使用
js插件---Amaze UI dialog如何使用 一.总结 一句话总结:别人给你列出来的参考手册照着用先 1.在哪里去找插件参考资料或者使用手册(一般位置找不到的时候)? github上面啊,非常 ...
- js插件---layer.js使用体验是怎样
js插件---layer.js使用体验是怎样 一.总结 一句话总结:只有jquery和js,没有css,使用各种弹出层掉用各种函数特别方便,特别简单,特别好用. 引入只需要引入这两个,css都不需要, ...
- js插件---jqGrid插件如何使用
js插件---jqGrid插件如何使用 一.总结 一句话总结:jqdrid还是依赖加js初始化的方式,很多时候插件的问题一般都是引入的css和js的问题,jqgrid里面遇到的问题就是下载包有一些js ...
- amazeui学习笔记--js插件(UI增强2)--按钮交互Button
amazeui学习笔记--js插件(UI增强2)--按钮交互Button 一.总结 1.按钮loading状态: <button type="button" class=&q ...
- 【jQuery小实例】js 插件 查看图片
---本系列文章所用使用js均可在本博客文件中找到. 像淘宝一样,鼠标放在某一件商品上,展示大图信息,甚至查看图片的具体部位.给人超炫的效果,这种效果实现基于js文件和js插件.大致可以分为三步,添加 ...
- 【PC端】jQuery+PHP实现浏览更多内容(jquery.more.js插件)
参数说明: 'amount' : '10', //每次显示记录数 'address' : 'comments.php', //请求后台的地址 'format' : 'json', //数据传输格式 ' ...
- chart.js插件生成折线图时数据普遍较大时Y轴数据不从0开始的解决办法[bubuko.com]
chart.js插件生成折线图时数据普遍较大时Y轴数据不从0开始的解决办法,原文:http://bubuko.com/infodetail-328671.html 默认情况下如下图 Y轴并不是从0开始 ...
随机推荐
- css文本溢出省略号大总结,如你所愿
一行: white-space: nowrap; text-overflow: ellipsis; overflow: hidden; word-break: break-all; 两行: width ...
- weblogic从ssrf到redis获取shell
一.环境搭建和知识储备 1.1.影响版本 漏洞编号:CVE-2014-4210 weblogic 10.0.2.0 weblogic 10.3.6.0 1.2.Docker搭建环境 1.进入vulhu ...
- request内部转发Demo
// 转发的Demo1 import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import ja ...
- GMAP.NET系列学习文档
http://www.cnblogs.com/enjoyeclipse/archive/2013/01/13/2858392.html http://www.cnblogs.com/luxiaoxun ...
- Sentry 监控 - Discover 事件大数据查询分析引擎
系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps Sentry For ...
- Elaticsearch基础概念
概述 elaticsearch是一个分布式的搜索引擎,它可以实现各种复杂的数据类型实现近实时的搜索功能,无论是结构化还是非结构化的数据,都能使用elaticsearch存储并且可以快速搜索.elati ...
- 个人作业--体温上报APP
第一阶段目标: 1.要求增加用户注册功能,用户注册信息包括用户ID(学号).用户名(姓名),手机号码,用户单位(班级),用户班级四项基本信息,用户第一次注册后,用户姓名不用每次输入 . 2.体温上报界 ...
- scrum项目冲刺_day10总结
摘要:今日完成任务. 1.发布功能实现 2.导航还在进行 总任务: 一.appUI页面(已完成) 二.首页功能: 1.图像识别功能(已完成) 2.语音识别功能(已完成) 3.垃圾搜索功能(基本完成) ...
- obs软件mac设置
1 远程电脑软件teamview或者向日葵 远程mac电脑会时黑屏或连不上, 需要设置系统偏好->设置软件权限 2 设置obs 显示不出画面或声音,也需要在系统偏好设置obs的权限(首先打开OB ...
- Jmeter系列(6)- 分析源码,创建登录、浏览商品接口请求
前言简介 接口的压力测试有个二八原则:线上80%的用户量在一天24小时20%(即4.8个小时)的时间里可以平稳运行,这个接口就算是通过压力测试了 源码分析 登录 浏览商品 创建请求 登录 浏览菜单 C ...