溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

vue中怎么使用svg封裝全局消息提示組件

發(fā)布時間:2022-04-18 13:36:15 來源:億速云 閱讀:234 作者:iii 欄目:開發(fā)技術(shù)

本文小編為大家詳細(xì)介紹“vue中怎么使用svg封裝全局消息提示組件”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“vue中怎么使用svg封裝全局消息提示組件”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識吧。

先看效果圖

vue中怎么使用svg封裝全局消息提示組件

vue中怎么使用svg封裝全局消息提示組件

一、首先安裝下載需要用到的svg相關(guān)依賴

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

二、針對沒有vue.config.js文件的vue項目,直接在webpack.base.conf.js中進(jìn)行如下兩個配置

1.找到圖片相關(guān)配置位置,添加款選出的代碼

vue中怎么使用svg封裝全局消息提示組件

2.在圖片配置后添加如下代碼

vue中怎么使用svg封裝全局消息提示組件

三、根據(jù)添加的代碼我們?nèi)rc下創(chuàng)建一個icons文件夾,icons下面創(chuàng)建一個svg文件夾,用于存放svg結(jié)尾的圖片

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文件夾,并創(chuàng)建組件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下創(chuàng)建的icons文件夾

vue中怎么使用svg封裝全局消息提示組件

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

vue中怎么使用svg封裝全局消息提示組件

完成了svg的配置 接下來試下全局消息提示

一、在components下創(chuàng)建Message文件夾,文件夾下創(chuàng)建兩個文件,一個message.vue,一個index.js

message.vue下添加以下代碼

<template>
    <transition name="fade">
        <div class="message_wrap" :class="type === 'success' ? 'wrap_success' : 'wrap_fail'" v-if="isShow">
            <!-- **這里引入前面創(chuàng)建的svg** -->
            <svg-icon :icon-class="type === 'success' ? 'success' : 'fail'" ></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()  // 創(chuàng)建實例
        instance.$mount(document.createElement('div')) // 創(chuàng)建dom元素
        document.body.appendChild(instance.$el) // 將dom元素添加到body中

        instance.type = type  // 寫入屬性
        instance.text = text  // 寫入屬性
        instance.isShow = true // 寫入屬性

        setTimeout(() => {
            instance.isShow = false  // 一段時候后關(guān)閉提示
        }, duration)
    },
    success(text, duration = 2000) {
        this.show(text, 'success', duration)  // 成功時調(diào)用
    },
    error(text, duration = 2000) {
        this.show(text, 'error', duration) // 失敗時調(diào)用
    },
};
// 全局注冊
function Msg() {
    vue.prototype.$message = MsgMain
}

export default Msg

二、在main.js中引入

vue中怎么使用svg封裝全局消息提示組件

三、使用:最后在需要用到的地方調(diào)用即可

vue中怎么使用svg封裝全局消息提示組件

vue中怎么使用svg封裝全局消息提示組件

讀到這里,這篇“vue中怎么使用svg封裝全局消息提示組件”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領(lǐng)會,如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI