vue封裝全局彈窗警告組件this.$message.success問題
更新時間:2023年09月26日 09:11:49 作者:默默的小跟班
這篇文章主要介紹了vue封裝全局彈窗警告組件this.$message.success問題,具有很的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
先上效果圖。
背景有遮罩層,并且模糊,彈窗設(shè)置了最小寬度,文字超出范圍,彈窗會自動擴(kuò)展。
寫一個彈窗組件
message.vue
<template> <!-- 遮罩層 也是整個組件的容器--> <div class="pop-container" v-if="isShow"> <div class="message-container"> <!-- 兩個icon放在一個容器中,但是只顯示一個 --> <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: { // 整個遮罩和彈窗是否顯示 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'; // 全局警告彈窗 第一個參數(shù)為提示的文本信息,第二個參數(shù)可選,為彈窗持續(xù)時間 // 可以提前看一下知識點(diǎn),Vue.extend + vm.$mount,可以讓我們在vue中用js一樣的方法去直接調(diào)用一個組件 // https://www.cnblogs.com/hentai-miao/p/10271652.html // 將vue組件利用Vue.extend方法變成一個組件構(gòu)造器,相當(dāng)于一個類 const MsgClass = vue.extend(Message); const MsgMain = { show(text, type, duration) { // 實(shí)例化這個組件 const instance = new MsgClass(); // 將組件實(shí)例掛在到一個元素上面,如果不傳參數(shù)就是掛載到body,或者也可以傳入其他已經(jīng)存在的元素的選擇器 instance.$mount(document.createElement('div')); // 通過組件實(shí)例的$el屬性,可以訪問到這個組件元素,然后把它拼接到body上。 document.body.appendChild(instance.$el); // 給這個實(shí)例傳入?yún)?shù) instance.type = type; instance.text = text; instance.isShow = true; // 設(shè)置一個延遲,過了時間彈窗消失 setTimeout(() => { instance.isShow = false; }, duration); }, // 成功時調(diào)用這個方法 success(text, duration = 2000) { this.show(text, 'success', duration); }, // 失敗時調(diào)用這個方法 error(text, duration = 2000) { this.show(text, 'error', duration); }, }; // 全局注冊 function Msg() { vue.prototype.$msg = MsgMain; // 最終調(diào)用就是this.$msg.success() 或者this.$msg.error() } export default Msg; </script>
全局注冊組件
main.js
import Msg from '../src/components/message'; Vue.use(Msg);
使用
this.$msg.success('設(shè)置成功!'); // 第二個參數(shù)可以傳入彈窗持續(xù)時間,默認(rèn)是2000 this.$msg.success('設(shè)置成功!',3000); this.$msg.error('設(shè)置失敗!')
總結(jié)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Vue中@keyup.enter?@v-model.trim的用法小結(jié)
這篇文章主要介紹了Vue中@keyup.enter?@v-model.trim的用法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-12-12Vue頁面刷新記住頁面狀態(tài)的實(shí)現(xiàn)
這篇文章主要介紹了Vue頁面刷新記住頁面狀態(tài)的實(shí)現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-12-12vue-cli 3.x配置跨域代理的實(shí)現(xiàn)方法
這篇文章主要介紹了vue-cli 3.x配置跨域代理的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04