vue中使用svg封装全局消息提示组件
作者:zxo_apple 发布时间:2024-04-09 10:48:24
标签:vue,提示组件
本文实例为大家分享了vue中使用svg封装全局消息提示组件的具体代码,供大家参考,具体内容如下
先看效果图
一、首先安装下载需要用到的svg相关依赖
npm install svg-sprite-loader --save-dev
二、针对没有vue.config.js文件的vue项目,直接在webpack.base.conf.js中进行如下两个配置
1.找到图片相关配置位置,添加款选出的代码
2.在图片配置后添加如下代码
三、根据添加的代码我们去src下创建一个icons文件夹,icons下面创建一个svg文件夹,用于存放svg结尾的图片
index.js文件夹中添加代码
import Vue from 'vue'
import SvgIcon from '../components/SvgIcon/SvgIcon'
Vue.component('svg-icon', SvgIcon)
const req = require.context('./svg', false, /\.svg$/)
const requireAll = requireContext => requireContext.keys().map(requireContext)
requireAll(req)
四、在components中添加SvgIcon文件夹,并创建组件svgIcon.vue,添加以下代码
<template>
<svg class="svg-icon" aria-hidden="true" v-on="$listeners">
<use :xlink:href="iconName" />
</svg>
</template>
<script>
export default {
name: "icon-svg",
props: {
iconClass: {
type: String,
required: true
},
className: {
type: String,
default: ""
}
},
computed: {
iconName() {
return `#icon-${this.iconClass}`;
},
svgClass() {
if (this.className) {
return "svg-icon " + this.className;
} else {
return "svg-icon";
}
}
}
};
</script>
<style>
.svg-icon {
width: 30px;
height: 30px;
vertical-align: -0.15em;
fill: currentColor;
overflow: hidden;
}
</style>
五、在main.js中引入,src下创建的icons文件夹
六、至此vue中使用svg就完成,接着直接在项目中使用即可
完成了svg的配置 接下来试下全局消息提示
一、在components下创建Message文件夹,文件夹下创建两个文件,一个message.vue,一个index.js
message.vue下添加以下代码
<template>
<transition name="fade">
<div class="message_wrap" :class="type === 'success' ? 'wrap_success' : 'wrap_fail'" v-if="isShow">
<!-- **这里引入前面创建的svg** -->
<svg-icon :icon-class="type === 'success' ? 'success' : 'fail'" style="margin-left: 40px;"></svg-icon>
<div class="message" :class="type === 'success' ? 'message_success' : 'message_fail'">{{text}}</div>
</div>
</transition>
</template>
<script>
export default {
name: 'message',
props: {
type: {
type: String,
default: 'success',
},
text: {
type: String,
default: '',
},
isShow: {
type: Boolean,
default: true,
},
},
};
</script>
<style scoped lang="scss">
.message_wrap {
position: fixed;
min-width: 400px;
height: 64px;
top: 6%;
left: 50%;
transform: translateX(-50%);
display: flex;
justify-content: flex-start;
align-items: center;
.message {
font-size: 18px;
line-height: 64px;
text-align: center;
margin-left: 16px;
}
.message_success {
color: #4caf50;
}
.message_fail {
color: #ff5252;
}
}
.wrap_success {
background: rgba(234,246,234, .5);
}
.wrap_fail {
background: rgba(255,235,235, .5);
}
.fade-enter-active, .fade-leave-active {
transition: opacity .5s
}
.fade-enter, .fade-leave-active {
opacity: 0
}
</style>
index.js中添加以下代码
import vue from 'vue'
import Message from './message'
const messageConstructor = vue.extend(Message)
const MsgMain = {
show(text, type, duration) {
const instance = new messageConstructor() // 创建实例
instance.$mount(document.createElement('div')) // 创建dom元素
document.body.appendChild(instance.$el) // 将dom元素添加到body中
instance.type = type // 写入属性
instance.text = text // 写入属性
instance.isShow = true // 写入属性
setTimeout(() => {
instance.isShow = false // 一段时候后关闭提示
}, duration)
},
success(text, duration = 2000) {
this.show(text, 'success', duration) // 成功时调用
},
error(text, duration = 2000) {
this.show(text, 'error', duration) // 失败时调用
},
};
// 全局注册
function Msg() {
vue.prototype.$message = MsgMain
}
export default Msg
二、在main.js中引入
三、使用:最后在需要用到的地方调用即可
来源:https://blog.csdn.net/zxo_apple/article/details/114521537


猜你喜欢
- 在python中,有很多用于生成基于JS的百度开源的数据可视化图表 Echarts 的类库。设置的图样都非常漂亮,小编之前研究过很多图示,用
- typing为Python的一个标注库,此默认支持PEP 484和PEP 526指定的类型提示。最基本的支持由Any、Union、Tuple
- 本文实例讲述了Python实现的概率分布运算操作。分享给大家供大家参考,具体如下:1. 二项分布(离散)import numpy as np
- 前言:不用改掉系统python2.7 ,原来是python2.7,我们还进行python2.7的保留1.编译前准备其他库的安装(使用sudo
- 前言前面介绍了Allure报告,本篇来学习普通的HTML如何展示在Jenkins上安装插件Manage Jenkins --> Man
- 本文实例讲述了Python中itertools模块用法,分享给大家供大家参考。具体分析如下:一般来说,itertools模块包含创建有效迭代
- TCP协议用在python和wifi模块之间python建立TCP连接需要用到socket协议 如果是TCP Server,建立T
- LDAP(Light Directory Access Portocol)是轻量目录访问协议,基于X.500标准,支持TCP/IP。LDAP
- 本文较为深入的探究了php中in_array函数用法。分享给大家供大家参考。具体如下:今天突然想到php中的in_array函数有个其怪的用
- 我就废话不多说了,大家还是直接看代码吧~import datetime# 时间格式 .%f 毫秒## "%Y-%m-%dT%H:%
- 为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想
- 导入相关包import timeimport pydashimport base64import requestsfrom lxml imp
- 一、多进程的实现方法一# 方法包装 多进程from multiprocessing import Processfrom ti
- 问题近日在做一组声纹聚类时,使用了另一团队同学开发的声纹距离算法。该算法对外提供的是一组so包,需要使用方自己去使用。在python中调用纯
- jQuery 简介jQuery 库可以通过一行简单的标记被添加到网页中。您需要具备的基础知识在您开始学习 jQuery 之前,您应该对以下知
- 1.什么是装饰器?要理解什么是装饰器,您首先需要熟悉Python处理函数的方式。从它的观点来看,函数和对象没有什么不同。它们有属性,可以重新
- 什么是pyc文件pyc是一种二进制文件,是由py文件经过编译后,生成的文件,是一种byte code,py文件变成pyc文件后,加载的速度有
- 你可能会遇到这样的要求,一个脚本,只允许有一个实例。在python中,为了实现这个需求,可以引入fcntl模块对文件加一个排他锁,这样一来,
- 最近在改一个页面,原来的编码是gb2312,为了国际化,改成utf-8,开始时浏览还是正常。因为电脑偶感小恙,于是恢复了系统,这才发现改后的
- 阅读:Mootools常用方法扩展(三) 继续Mootools常用方法扩展,这次是Window类上的扩展,也就是全局函数。方法:$param