<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當(dāng)前位置: 首頁 - 科技 - 知識(shí)百科 - 正文

        Vue自定義toast組件的實(shí)例代碼

        來源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 22:09:59
        文檔

        Vue自定義toast組件的實(shí)例代碼

        Vue自定義toast組件的實(shí)例代碼:寫了兩三天,終于把toast組件寫出來了。不敢說是最好的設(shè)計(jì),希望有更好思路的朋友可以在評(píng)論區(qū)給我意見!_(:з」∠)_ 第一步:寫toast.vue,將樣式之類的先定下來 <template> <div v-show=showToast class=toast :
        推薦度:
        導(dǎo)讀Vue自定義toast組件的實(shí)例代碼:寫了兩三天,終于把toast組件寫出來了。不敢說是最好的設(shè)計(jì),希望有更好思路的朋友可以在評(píng)論區(qū)給我意見!_(:з」∠)_ 第一步:寫toast.vue,將樣式之類的先定下來 <template> <div v-show=showToast class=toast :

        寫了兩三天,終于把toast組件寫出來了。不敢說是最好的設(shè)計(jì),希望有更好思路的朋友可以在評(píng)論區(qū)給我意見!_(:з」∠)_

        第一步:寫toast.vue,將樣式之類的先定下來

        <template>
         <div v-show="showToast" class="toast" :class="position">
         <div class="toast_container" v-if="type=='success'">
         <div><i class="iconfont icon-check icon"></i></div>
         <div class="msg_container">{{message}}</div>
         </div>
         <div class="toast_container" v-else-if="type=='wrong'">
         <div><i class="iconfont icon-warning-circle icon"></i></div>
         <div class="msg_container">{{message}}</div>
         </div>
         <div class="toast_container" v-else-if="type=='loading'">
         <div><loading10></loading10></div>
         <div class="msg_container">{{message}}</div>
         </div>
        </div>
        </template>
        <script>
        import loading10 from '../loading/spiner'
        export default{
         props:{
         message:String,
         type:{
         validator: function (value) {
         // 值必須是這些字符串中的一個(gè)
         return ['success', 'wrong', 'loading'].indexOf(value) !== -1
         },
         default:'success'
         },
         duration:{
         type:Number,
         default:3000
         },
         position:{
         type:String,
         default:'middle'
         }
         },
         components:{
         loading10
         },
         data(){
         return{
         showToast:false
         }
         }
        }
        </script>
        <style scoped>
        .toast{
         width:100%;
        }
        .toast_container{
         background: rgba(0, 0, 0, 0.7);
         border-radius: 8px;
         color:#fff;
         margin-left:88px;
         margin-right:88px;
         text-align:center;
         padding-top:15px;
         padding-bottom: 15px; 
        }
        .top{
         position:absolute;
         top:10%;
        }
        .middle{
         position:absolute;
         top:40%;
        }
        .bottom{
         position:absolute;
         top:70%;
        }
        .msg_container{
         margin-top:8px;
         margin-left:15px;
         margin-right:15px;
         line-height: 22px;
         font-size: 16px;
         word-wrap: break-word;
        }
        .icon{
         font-size:30px;
        }
        </style>

        一共三種樣式,成功(success),失?。╳rong),加載中(loading);

        一共三種位置,上(top),中(middle),下(bottom);

        所有涉及的圖案出自阿里的iconfont 手機(jī)淘寶圖標(biāo)庫。

        加載中動(dòng)畫是自己寫的蹩腳的加載組件(emmm,就不放出來污染大家眼睛了,需要的可以評(píng)論區(qū)知會(huì)一聲_(:з」∠)_)

        第二步:寫index.js ,完成toast組件的實(shí)例化

        import Vue from 'vue'
        import Toast from './toast'
        let singleToast=true;
        let queue=[];
        function createInstance(){
         // 返回一個(gè)擴(kuò)展實(shí)例構(gòu)造器
         if(!queue.length||!singleToast){
         const ToastConstructor = Vue.extend(Toast);
         // 構(gòu)造一個(gè)實(shí)例
         const toastDom = new ToastConstructor({
         el: document.createElement('div'),
         });
         // 把實(shí)例化的 toast.vue 添加到 body 里
         document.body.appendChild(toastDom.$el);
         queue.push(toastDom);
         singleToast=true;
         return toastDom;
         }
        };
        // 注冊(cè)為全局組件的函數(shù)
        function toast(options= {}) {
         const toastDom = createInstance();
         toastDom.message =typeof options === 'string' ? options : options.message;
         toastDom.type = options.type || 'success';
         toastDom.duration = options.duration || 3000;
         toastDom.position = options.position || 'middle';
         if(!toastDom.message){
         toastDom.showToast =singleToast= false;
         }else{
         toastDom.showToast=true;
         setTimeout(() => {toastDom.showToast =singleToast= false} ,toastDom.duration);
         }
        }
        // 將組件注冊(cè)到 vue 的 原型鏈里去,
        // 這樣就可以在所有 vue 的實(shí)例里面使用 this.$toast()
        // Vue.prototype.$toast = showToast
        Vue.prototype.$toast = toast;
        export default toast

        設(shè)置singleToast和queue的目的在于:確保同一時(shí)期界面上只有一個(gè)toast,不能同時(shí)出現(xiàn)多個(gè)toast。

        由于toast會(huì)初始化,因此為了避免在任何操作之前界面上就出現(xiàn)一個(gè)toast,用if語句判斷:

        如果沒有傳入的message,則不顯示toast(這樣可以使得初始化的toast不顯示)

        否則顯示,并且過一定時(shí)間消失,只有singleToast為false,說明此刻界面上沒有toast,才能再新建一個(gè)toast實(shí)例(因?yàn)榇藭r(shí)if判斷內(nèi)queue.length 不為0【初始化的toast組件本身占了一個(gè)位置】,而singleToast為false,因此可以創(chuàng)建)

        第三步:使用

        在main.js 添加如下代碼:

        import toast from './components/toast/index'
        Vue.use(toast)

        創(chuàng)建需要調(diào)用的Vue文件:

        <template>
         <div>
         <input type="button" value="顯示彈窗" @click="showToast">
         </div>
        </template>
         <script>
         export default {
         methods: {
         showToast () {
         this.$toast({message:'加載中',type:'loading',position:'bottom',
         duration:'2000'});
         // this.$toast('成功提示');
         }
         }
         }
         </script>

        可以看到一共兩種方式,可以以對(duì)象方式傳入?yún)?shù),也可以只傳入字符串,其他采用默認(rèn)設(shè)置。

        總結(jié)

        以上所述是小編給大家介紹的SVue自定義toast組件的實(shí)例代碼,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

        聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        Vue自定義toast組件的實(shí)例代碼

        Vue自定義toast組件的實(shí)例代碼:寫了兩三天,終于把toast組件寫出來了。不敢說是最好的設(shè)計(jì),希望有更好思路的朋友可以在評(píng)論區(qū)給我意見!_(:з」∠)_ 第一步:寫toast.vue,將樣式之類的先定下來 <template> <div v-show=showToast class=toast :
        推薦度:
        標(biāo)簽: VUE 自定義 代碼
        • 熱門焦點(diǎn)

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲精品国产自在久久| 国产美女a做受大片免费| 亚洲熟妇AV一区二区三区宅男| 日本一区午夜艳熟免费| 亚洲?V乱码久久精品蜜桃| 久久精品国产亚洲5555| 国产精品亚洲专区在线播放 | 黄页网站在线视频免费| 午夜高清免费在线观看| 国产亚洲3p无码一区二区| 亚洲日产乱码一二三区别| 成年女人毛片免费播放视频m| 亚洲中文字幕久久精品无码A| 午夜两性色视频免费网站| 色多多免费视频观看区一区| 亚洲AV无码成H人在线观看| 免费手机在线看片| 久久精品国产亚洲一区二区| 一区二区三区四区免费视频 | 国产精品亚洲精品日韩动图| 免费久久精品国产片香蕉| 国产精品99爱免费视频| 久久精品国产免费观看| 亚洲精品久久久www| 成人爽a毛片免费| 亚洲日本国产乱码va在线观看| A级毛片高清免费视频在线播放| 亚洲国产精品自在在线观看| 在线观看无码AV网站永久免费 | 一级做a毛片免费视频| 午夜男人一级毛片免费| 美女免费视频一区二区| 久久夜色精品国产亚洲| 一级女人18毛片免费| 亚洲视频在线观看免费视频| 成全高清视频免费观看| 国产精品永久免费视频| 亚洲精品视频免费看| 国产成人涩涩涩视频在线观看免费 | 99免费观看视频| 亚洲成AV人片高潮喷水|