Kros的博客 Kros的博客
首页
  • CSS
  • 工具
  • Vue
  • js
  • Vue3
  • 算法
  • 折腾笔记
一言
  • 分类
  • 标签
  • 归档
码云

Kros

凡心所向,素履以往,生如逆旅,一苇以航
首页
  • CSS
  • 工具
  • Vue
  • js
  • Vue3
  • 算法
  • 折腾笔记
一言
  • 分类
  • 标签
  • 归档
码云
  • CSS

  • JavaScript

  • 工具

  • Vue

    • vue批量引入组件
    • vue中watch用法
    • vue使用基础JSX语法
    • vue首页白屏
    • vue长列表优化
    • 模板文件中script、template、style存在必要性
    • popup弹窗组件
    • 使用$mount和extend扩展vue
    • 扩展toast合并popup(按需加载)
    • canvas实现弧形进度条
    • vue中使用CSS Modules
    • vue实现无限轮播图
    • vue半圆形菜单
    • 纯CSS实现圆形进度条
    • v-model简单实现
    • vue带箭头下拉框
    • vue事件修饰符
    • vue鼠标悬浮显示提示文字
    • vue添加发布版本号方法
    • vue配置全局样式文件
    • vue在env development中设置全局变量不生效
    • vue引入less或scss全局变量
    • vue中使用Keepalive
    • vue2为什么只支持一个根节点
    • vue打包优化分析工具—webpack-bundle-analyzer
    • vue使用echarts(按需加载)
    • echarts柱形图重合堆叠
    • vue使用draggable实现多列拖拽(解决空列不能拖拽问题)
    • vue禁止三方库打包到bundle中
    • npm run serve运行背后的思考
    • vxe-table树结构不允许insert
    • vue组件延迟加载
    • 多页面应用配置
    • vue项目常用优化
    • vue实现拖动拼图验证码
    • vue虚拟dom
    • canvas心形动画
    • canvas绘制玫瑰曲线
    • element表单validateField验证部分字段
    • element日期选择限制今天以后并精确到小时
    • 前端使用JSEncrypt和node-rsa进行rsa加密传输和接收解密
    • elementui日期选择器生日只选择月和日不选择年并隐藏年份
    • el-upload组件第二次点击手动submit时不生效
    • element表单内输入框使用@keyup enter native回车时会刷新页面
  • antdv踩坑记录

  • Vue3

  • 前端
  • Vue
kros
2021-01-04

扩展toast合并popup(按需加载)

上一篇我们对popup进行了扩展,依样画葫芦这里我对toast进行同样的封装。代码如下:

// toast.vue
<template>
	<div class="container">
		<div class="content">
			{{content}}
		</div>
	</div>
</template>

<script>
	export default {
		data() {
			return {
				content: '',
				time: 1500
			}
		},
		methods: {
			// 移除
			destorySelf() {
				// 销毁实例 移除事件、指令,删除子实例,但dom依然存在
				this.$destroy(true);
				// 从dom节点删除
				this.$el && this.$el.parentNode.removeChild(this.$el) 
			}
		},
		mounted() {
			setTimeout(() => {
				console.log('destory');
				this.destorySelf();
			}, this.time);
		}
	}
</script>

<style>
	.container {
		position: fixed;
		display: flex;
		flex-direction: column;
		align-items: center;
		justify-content: center;
		top: 0;
		left: 0;
		right: 0;
		bottom: 0;
	}
	
	.container .content {
		background-color: rgba(0,0,0,.8);
		padding: 5px 10px;
		max-height: 70%;
		font-size: 14px;
		color: #FFFFFF;
		border-radius: 5px;
	}
</style>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
// toast.js
import Vue from 'vue'
import toast from './toast.vue'

const toastSub = Vue.extend(toast)

export function createToast(options){
	let time_num = options && typeof options.time == 'number' ? true : false
	let m = new toastSub({
		data: {					
			content: options && options.content || '',
			time: time_num ? options.time : 1500
		}
	});
	// 
	let vm = m.$mount();
	document.querySelector('#app').appendChild(vm.$el);
	return vm;
}

export default {
	install: (Vue) => {
		Vue.prototype.$toast = createToast;
	}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

这里即使用export导出又使用export default默认导出的原因就是让扩展可以独立使用有可以合并使用。 新建index.js,其中添加如下代码

import Vue from 'vue'
import { createToast } from './toast/toast.js'
import { createModal } from './modal/modal.js'

export default {
	install: (Vue) => {
		Vue.prototype.$custom = {
			toast: createToast,
			modal: createModal
		}
		// 或
		// Vue.prototype.$modal = createModal;
		// Vue.prototype.$toast = createToast;
	}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

修改main.js中代码如下:

// 全部加载
import custom from './custom' //引入index.js
Vue.use(custom);

// 按需加载
// import modal from './custom/modal/modal.js'
// Vue.use(modal);
1
2
3
4
5
6
7

这里使用按需加载的意义并不大,只是作为一个参考。既然方法可以这样使用,那我们就可以对全局组件的注册进行按需加载和全部加载。

代码示例

#vue
上次更新: 2025/09/05, 8:09:00
使用$mount和extend扩展vue
canvas实现弧形进度条

← 使用$mount和extend扩展vue canvas实现弧形进度条→

最近更新
01
Find the next perfect square
09-05
02
Regex validate PIN code
09-05
03
Find the odd int
09-05
更多文章>
Theme by Vdoing | Copyright © 2020-2025 kros king
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
icon-heart-o icon-heart icon-infinity icon-pause icon-play link next prev