vue封裝全局彈窗警告組件this.$message.success問(wèn)題
更新時(shí)間:2023年09月26日 09:11:49 作者:默默的小跟班
這篇文章主要介紹了vue封裝全局彈窗警告組件this.$message.success問(wèn)題,具有很的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
先上效果圖。
背景有遮罩層,并且模糊,彈窗設(shè)置了最小寬度,文字超出范圍,彈窗會(huì)自動(dòng)擴(kuò)展。

寫一個(gè)彈窗組件
message.vue
<template>
<!-- 遮罩層 也是整個(gè)組件的容器-->
<div class="pop-container" v-if="isShow">
<div class="message-container">
<!-- 兩個(gè)icon放在一個(gè)容器中,但是只顯示一個(gè) -->
<div class="icon-container">
<div class="icon-container-success" v-if="type === 'success'">
<!-- 引用了iview的Icon組件 -->
<Icon class="icon-checkmark" type="md-checkmark" size="30" color="#D8DCE9" />
</div>
<div class="icon-container-error" v-if="type === 'error'">
<Icon class="icon-close" type="md-close" size="30" color="#D8DCE9" />
</div>
</div>
<span class="message-text">{{ text }}</span>
</div>
</div>
</template><script>
export default {
name: 'message',
props: {
type: { // type控制是成功還是失敗
type: String,
default: 'success',
},
text: { // 彈窗的文字信息
type: String,
default: '',
},
isShow: { // 整個(gè)遮罩和彈窗是否顯示
type: Boolean,
default: true,
},
},
};
</script><style scoped lang="less">
.pop-container {
display: flex;
justify-content: center;
align-items: center;
z-index: 99999;
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(24, 30, 53, 0.7);
backdrop-filter: blur(10px);
}
.message-container {
display: flex;
justify-content: center;
align-items: center;
min-width: 384px;
padding: 0 30px;
height: 170px;
background: #303e62;
box-shadow: 0px 0px 30px rgba(0, 0, 0, 0.1);
border-radius: 12px;
}
.icon-container {
position: relative;
height: 40px;
width: 40px;
border-radius: 50%;
&-error {
background-color: #fe1b1b;
height: 40px;
width: 40px;
border-radius: 50%;
.icon-close {
position: absolute;
right: 5px;
bottom: 5px;
font-weight: 900;
}
}
&-success {
background-color: #4ad991;
height: 40px;
width: 40px;
border-radius: 50%;
.icon-checkmark {
position: absolute;
right: 4px;
bottom: 5px;
font-weight: 900;
}
}
}
.message-text {
margin-left: 12px;
font-weight: 500;
font-size: 18px;
line-height: 27px;
}
</style>配置js文件
message.js
<script>
import vue from 'vue';
// 引入上面寫好的組件
import Message from './message';
// 全局警告彈窗 第一個(gè)參數(shù)為提示的文本信息,第二個(gè)參數(shù)可選,為彈窗持續(xù)時(shí)間
// 可以提前看一下知識(shí)點(diǎn),Vue.extend + vm.$mount,可以讓我們?cè)趘ue中用js一樣的方法去直接調(diào)用一個(gè)組件
// https://www.cnblogs.com/hentai-miao/p/10271652.html
// 將vue組件利用Vue.extend方法變成一個(gè)組件構(gòu)造器,相當(dāng)于一個(gè)類
const MsgClass = vue.extend(Message);
const MsgMain = {
show(text, type, duration) {
// 實(shí)例化這個(gè)組件
const instance = new MsgClass();
// 將組件實(shí)例掛在到一個(gè)元素上面,如果不傳參數(shù)就是掛載到body,或者也可以傳入其他已經(jīng)存在的元素的選擇器
instance.$mount(document.createElement('div'));
// 通過(guò)組件實(shí)例的$el屬性,可以訪問(wèn)到這個(gè)組件元素,然后把它拼接到body上。
document.body.appendChild(instance.$el);
// 給這個(gè)實(shí)例傳入?yún)?shù)
instance.type = type;
instance.text = text;
instance.isShow = true;
// 設(shè)置一個(gè)延遲,過(guò)了時(shí)間彈窗消失
setTimeout(() => {
instance.isShow = false;
}, duration);
},
// 成功時(shí)調(diào)用這個(gè)方法
success(text, duration = 2000) {
this.show(text, 'success', duration);
},
// 失敗時(shí)調(diào)用這個(gè)方法
error(text, duration = 2000) {
this.show(text, 'error', duration);
},
};
// 全局注冊(cè)
function Msg() {
vue.prototype.$msg = MsgMain;
// 最終調(diào)用就是this.$msg.success() 或者this.$msg.error()
}
export default Msg;
</script>全局注冊(cè)組件
main.js
import Msg from '../src/components/message'; Vue.use(Msg);
使用
this.$msg.success('設(shè)置成功!'); // 第二個(gè)參數(shù)可以傳入彈窗持續(xù)時(shí)間,默認(rèn)是2000
this.$msg.success('設(shè)置成功!',3000);
this.$msg.error('設(shè)置失??!')總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Vue?Token過(guò)期問(wèn)題的2種解決方案小結(jié)
在使用token進(jìn)行登錄的過(guò)程中,如果token過(guò)期了,需要重新輸入用戶名和密碼登錄,這種體驗(yàn)肯定是不好的,下面這篇文章主要給大家介紹了關(guān)于Vue?Token過(guò)期問(wèn)題的2種解決方案,需要的朋友可以參考下2023-02-02
Vue中@keyup.enter?@v-model.trim的用法小結(jié)
這篇文章主要介紹了Vue中@keyup.enter?@v-model.trim的用法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-12-12
Vue頁(yè)面刷新記住頁(yè)面狀態(tài)的實(shí)現(xiàn)
這篇文章主要介紹了Vue頁(yè)面刷新記住頁(yè)面狀態(tài)的實(shí)現(xiàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-12-12
Vue安裝依賴npm install時(shí)的報(bào)錯(cuò)問(wèn)題及解決
這篇文章主要介紹了Vue安裝依賴npm install時(shí)的報(bào)錯(cuò)問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06
vue-cli 3.x配置跨域代理的實(shí)現(xiàn)方法
這篇文章主要介紹了vue-cli 3.x配置跨域代理的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04

