vue中使用svg封装全局消息提示组件
作者:zxo_apple 时间:2024-04-09 10:48:24
本文实例为大家分享了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
标签:vue,提示组件
0
投稿
猜你喜欢
python两种注释用法的示例
2022-07-22 04:50:50
对Python信号处理模块signal详解
2021-08-20 04:06:11
如何配置一个稳定的SQL Server数据库
2008-12-09 14:07:00
使用javascript控制cookie显示和隐藏背景图
2024-04-23 09:33:26
javascript实现不同颜色Tab标签切换效果
2024-02-24 16:14:35
python实现彩色图转换成灰度图
2022-03-11 02:41:30
简单文件操作python 修改文件指定行的方法
2022-07-13 15:02:52
Python的iOS自动化打包实例代码
2022-04-18 01:15:19
SQL窗口函数之聚合窗口函数的使用(count,max,min,sum)
2024-01-21 00:56:09
页面制作的重要性
2007-10-30 13:14:00
js实现随屏幕滚动的带缓冲效果的右下角广告代码
2024-06-07 15:26:48
PHP 巧用数组降低程序的时间复杂度
2023-11-15 09:40:02
python中关于时间和日期函数的常用计算总结(time和datatime)
2022-01-02 05:50:08
sqlserver中查询横表变竖表的sql语句简析
2012-05-22 18:10:00
使用Python点云生成3D网格
2023-02-06 18:32:45
socket + select 完成伪并发操作的实例
2022-05-09 14:23:32
MySQL 加密/压缩函数
2024-01-23 23:51:14
微信小程序canvas写字板效果及实例
2024-04-19 09:44:03
python基础教程之获取本机ip数据包示例
2022-09-28 13:31:45
关于PySnooper 永远不要使用print进行调试的问题
2022-12-08 10:29:35