网站首页 > 博客文章 正文
Hi,我们又见面了,我是小鑫同学1024,今天带来了2021年技术梳理篇《Vue全局使用类组件开发》
特点
- 一次注册,全局调用
- 组件挂载body节点
效果图
使用方式
全局Vue挂载前导入
import Notice from './components/notice/index';
Vue.use(Notice)
全局Vue挂载后导入
import './components/notice/index';
使用
this.$notice({
title: "温馨提示",
message: "我是一个全局使用的组件",
duration: 1000,
}).show();
定义组件
代码来自开课吧课程资料
1. 实现执行show函数打开弹窗
2. 定时器结束关闭弹窗,并执行remove()移出dom
<template>
<div class="box" v-if="isShow">
<h3>{{ title }}</h3>
<p class="box-content">{{ message }}</p>
</div>
</template>
<script>
export default {
name: 'Notice',
props: {
title: {
type: String,
default: "",
},
message: {
type: String,
default: "",
},
duration: {
type: Number,
default: 1000,
},
},
data() {
return {
isShow: false,
};
},
methods: {
show() {
this.isShow = true;
setTimeout(this.hide, this.duration);
},
hide() {
this.isShow = false;
this.remove();
},
},
};
</script>
<style>
.box {
position: fixed;
width: 100%;
top: 16px;
left: 0;
text-align: center;
pointer-events: none;
background-color: #fff;
border: grey 3px solid;
box-sizing: border-box;
}
.box-content {
width: 200px;
margin: 10px auto;
font-size: 14px;
padding: 8px 16px;
background: #fff;
border-radius: 3px;
margin-bottom: 8px;
}
</style>
定义Vue插件
基础结构
// 1. 导入组件
import Notice from './src/Notice';
// 2. 为组件新增install方法
Notice.install = function (_Vue) {
...
};
// 可以在组件内部直接导入使用自动执行install
if (typeof window !== 'undefined' && window.Vue) {
Notice.install(window.Vue);
}
export default Notice
install关键点实现
let Vue = _Vue
Vue.prototype.$notice = (props) => {
// 实例化组件
const _vm = new Vue({
render: h => {
return h(Notice, { props })
}
})
// 执行挂载关联DOM
_vm.$mount()
// 手动添加到body中
document.body.appendChild(_vm.$el)
const comp = _vm.$children[0]
// 定义组件销毁函数,Notice组件定时器结束后调用
comp.remove = () => {
document.body.removeChild(_vm.$el)
_vm.$destroy()
}
// 返回组件便于使用是传递props参数和执行show函数
return comp;
};
本篇内容到此就结束了,感谢你的阅读,我是小鑫同学1024,一个5年滴,Bug,来者不拒,断点打起来,3年Android开发,2年+Vue前端开发,混合App开发的程序员,如果文章对你有所帮助,希望可以动动你的小手[赞]、[666]、[来看我],我们下篇文章见[灵光一闪]~
猜你喜欢
- 2024-11-25 又一个布局利器,CSS 伪类 :placeholder-shown
- 2024-11-25 值得收藏的CSS小技巧
- 2024-11-25 尤娜v1.2.2内置函数用法-Part II(分页函数)
- 2024-11-25 总结7个工作中常用的css3案例,带你了解冷门却实用的特性
- 2024-11-25 带你手写一个轮播图之HTML结构和CSS布局设计
- 2024-11-25 稍微整理了几个经常在H5移动端开发遇到的东西
- 2024-11-25 七爪源码:如何使用 vanilla JS & CSS 创建滚动到顶部按钮
- 2024-11-25 吃透 Vue 项目开发实践|16个方面深入前端工程化开发技巧【上】
- 2024-11-25 3个超秀的 Vue 卡片翻动组件Vue-Card-Slide
- 2024-11-25 揭秘前端无刷新提交数据的黑科技 - React Server Actions深度解析
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)