首页

源码搜藏网

首页 > 开发教程 > js/jQuery教程 >

vue中使用svg封装全局消息提示组件

创建时间:2022-04-18 13:33  

本文实例为大家分享了vue中使用svg封装全局消息提示组件的具体代码,供大家参考,具体内容如下

先看效果图

vue中使用svg封装全局消息提示组件

vue中使用svg封装全局消息提示组件

一、首先安装下载需要用到的svg相关依赖

npm install svg-sprite-loader --save-dev

二、针对没有vue.config.js文件的vue项目,直接在webpack.base.conf.js中进行如下两个配置

1.找到图片相关配置位置,添加款选出的代码

vue中使用svg封装全局消息提示组件

2.在图片配置后添加如下代码

vue中使用svg封装全局消息提示组件

三、根据添加的代码我们去src下创建一个icons文件夹,icons下面创建一个svg文件夹,用于存放svg结尾的图片

vue中使用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封装全局消息提示组件

六、至此vue中使用svg就完成,接着直接在项目中使用即可

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中引入

vue中使用svg封装全局消息提示组件

三、使用:最后在需要用到的地方调用即可

vue中使用svg封装全局消息提示组件

vue中使用svg封装全局消息提示组件

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持源码搜藏网。

上一篇:vue中怎么区分不同的环境
下一篇:没有了

相关内容

热门推荐