精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

活用 async/await ,讓 Vue 變得更好用的裝飾器!

開發(fā) 前端
下文三個(gè)裝飾器,都是利用了async/await把異步變成同步的特性實(shí)現(xiàn)的。

[[420903]]

下文三個(gè)裝飾器,都是利用了async/await把異步變成同步的特性實(shí)現(xiàn)的。

要求被裝飾的方法必須寫成async/await,用起來十分方便,實(shí)現(xiàn)徹底被隱藏在了裝飾器內(nèi)部。

前兩個(gè)都是用在ts環(huán)境下class寫法的vue里的。不過看清楚邏輯后,很容易修改成可以用在js環(huán)境中的vue組件上。

1. 給vue添加一個(gè)指示初始化完成的變量。

指業(yè)務(wù)相關(guān)的初始化邏輯都完成了 比如搜索功能:搜索中顯示loading,結(jié)果為空時(shí)顯示暫無數(shù)據(jù)。但是第一次打開頁面時(shí),搜索還沒完成,但顯示暫無數(shù)據(jù)又不合適 這個(gè)時(shí)候就需要一個(gè)這樣的變量處理邊界情況 用于ts環(huán)境下的vue。

通過裝飾器添加這個(gè)屬性,并包裝vue的created, mounted和beforeDestroy方法。當(dāng)created或者mounted里發(fā)出的請求完成后,就把pageIsReady設(shè)為true。使用這個(gè)裝飾器時(shí),在業(yè)務(wù)代碼中完全無感,沒有任何心智負(fù)擔(dān)。 

  1. import { Constructor } from"vue/types/options";  
  2. export type WrapReadyProperty<T> = T & { pageIsReady?: boolean }  
  3. /**  
  4.  * 在@compontent 之后使用這個(gè)裝飾器,  
  5.  * 組件就會(huì)被注入屬性 pageIsReady,  
  6.  * 當(dāng)created和mounted都執(zhí)行完成時(shí) pageIsReady 變成true, 
  7.  * 要求mounted或created是async/await。(取決于在哪個(gè)方法中發(fā)請求初始化組件)  
  8.  * 然后可以在template中直接使用。  
  9.  * 在script中使用調(diào)用isPageReady.call(this)方法;  
  10.     */  
  11. exportdefaultfunction PageReadyStatus() {  
  12.     let createdDone = false 
  13.     let mountedDone = false 
  14.     function isCreatedMountedAllDone() {  
  15.         return createdDone && mountedDone;  
  16.     }  
  17.     returnfunction pageReadyEnhancement<T extends Constructor>(target: T) {  
  18.         const oldMounted = target.prototype.mounted || function() { }  
  19.         const oldCreated = target.prototype.created || function() { }  
  20.         const oldBeforeDestroy = target.prototype.beforeDestroy || function() { }  
  21.         target.prototype.pageIsReady = false 
  22.         target.prototype.created = asyncfunction(...params: any[]) {  
  23.             await oldCreated.apply(this, params);  
  24.             createdDone = true 
  25.             this.pageIsReady = isCreatedMountedAllDone()  
  26.         }  
  27.         target.prototype.mounted = asyncfunction(...params: any[]) {  
  28.             await oldMounted.apply(this, params); 
  29.             mountedDone = true 
  30.             this.pageIsReady = isCreatedMountedAllDone()  
  31.         }  
  32.         target.prototype.beforeDestroy = asyncfunction(...params: any[]) {  
  33.             await oldBeforeDestroy.apply(this, params);  
  34.             mountedDone = false 
  35.             createdDone = false 
  36.             this.pageIsReady = false 
  37.         }  
  38.         return target  
  39.     };  
  40.  
  41. exportfunction isPageReady(this: WrapReadyProperty<Vue>) {  
  42.     returnthis.pageIsReady  

2. 給事件回調(diào)函數(shù)和按鈕Dom添加防抖與loading樣式

用于ts環(huán)境下的vue。

通過裝飾器包裝被裝飾的方法。要求被包裝的方式是async/await的。這樣裝飾器內(nèi)只需要用一個(gè)await就可以得知被包裝的方法是否執(zhí)行完成。同時(shí),可以從事件對象中拿到被點(diǎn)擊的dom元素并修改它。 

  1. /*  
  2.  * 請保證被包裝的方法的參數(shù)列表最后一個(gè)是點(diǎn)擊事件的參數(shù)  
  3.  */  
  4. exportdefaultfunction buttonThrottle() {  
  5.     let pending = false 
  6.     returnfunction(target: any, name: string): any {  
  7.         const btnClickFunc = target[name];  
  8.         const newFunc = asyncfunction(this: Vue, ...params: any[]) {  
  9.             if (pending) {  
  10.                 return;  
  11.             }  
  12.             const event:Event = params[params.length - 1];  
  13.             let btn = event.target as HTMLElement  
  14.             pending = true 
  15.             const recoverCursor = changeCursor(btn);  
  16.             try {  
  17.                 await btnClickFunc.apply(this, params);  
  18.             } catch (error) {  
  19.                 console.error(error);  
  20.             }  
  21.             recoverCursor();  
  22.             pending = false 
  23.         };  
  24.         target[name] = newFunc;  
  25.         return target;  
  26.     };  
  27.  
  28. function changeCursor(btn?: HTMLElement) {  
  29.     if (btn == null) {  
  30.         return() => {};  
  31.     }  
  32.     const oldCursor = btn.style.cursor;  
  33.     btn.style.cursor = "wait" 
  34.     return() => {  
  35.         btn.style.cursor = oldCursor 
  36.     };  

用法: 在點(diǎn)擊事件函數(shù)上使用這個(gè)裝飾器。裝飾器會(huì)自動(dòng)檢測該函數(shù)是否執(zhí)行完成,并在執(zhí)行過程中往按鈕的Dom節(jié)點(diǎn)上添加point:wait屬性。

  1. import { Component, Vue } from"vue-property-decorator";  
  2.     import buttonThrottle from"@/ui/view/utils/buttonThrottle";  
  3.     type Member = { account_no: string; name: string; warn?: string };  
  4.     @Component({ components: {} })  
  5.     exportdefaultclass AddMemberInput extends Vue {        @buttonThrottle()  
  6.         private async confirmAdd() {  
  7.             awaitthis.addMembers(this.getVaildMembers());  
  8.         }  
  9.     } 

3. mounted之前顯示白屏

用于js的vue中包裝vue的對象。

同上,通過async/await獲得mounted或者created是否執(zhí)行完成 再通過指向vue實(shí)力的this拿到組件根節(jié)點(diǎn),然后按需修改它 以下代碼只是將組件隱藏了,實(shí)際上可以寫更復(fù)雜的邏輯,在加載過程中顯示其他內(nèi)容,畢竟拿到了Dom,想干嘛就干嘛。 

  1. function firstPaintControl(vueObj) {  
  2.     let oldMounted = vueObj.mounted || function() {};  
  3.     vueObj.mounted = asyncfunction(...params) {  
  4.       this.$el.style.visibility = 'hidden' 
  5.       await oldMounted.apply(this, params);  
  6.       this.$el.style.visibility = 'visible' 
  7.     };  
  8.     return vueObj;  
  9.   }  

 

責(zé)任編輯:龐桂玉 來源: 前端大全
相關(guān)推薦

2017-08-02 14:17:08

前端asyncawait

2022-07-11 10:32:35

Vue3await響應(yīng)式

2024-10-17 08:58:31

2014-05-07 09:41:21

UbuntuTrusty Tahr

2014-07-15 10:31:07

asyncawait

2016-11-22 11:08:34

asyncjavascript

2022-06-15 10:24:13

Pytho裝飾器代碼

2023-10-08 10:21:11

JavaScriptAsync

2022-03-04 20:28:02

VueReact網(wǎng)頁

2021-01-14 22:13:03

人工智能教育互聯(lián)網(wǎng)

2018-01-02 12:13:39

瀏覽器火狐擴(kuò)展

2019-02-22 21:53:22

習(xí)慣FabulousAPP

2012-07-22 15:59:42

Silverlight

2021-07-20 10:26:12

JavaScriptasyncawait

2025-06-26 08:23:47

2024-05-10 12:33:06

flask裝飾器

2017-09-02 14:29:01

路由器Wi-Fi無線網(wǎng)絡(luò)

2022-08-27 13:49:36

ES7promiseresolve

2021-06-28 07:27:43

AwaitAsync語法

2024-12-30 08:22:35

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

精品小视频在线| 亚洲国产日韩a在线播放性色| 国产精品aaaa| www日韩在线| 1769国产精品视频| 五月天久久比比资源色| 日本一区精品| av中文字幕第一页| 亚洲免费黄色| 中文字幕一精品亚洲无线一区 | 综合久久久久| 亚洲福利视频在线| 国产九九在线视频| 日韩精品亚洲人成在线观看| 99国产精品久| 成人啪啪免费看| 国产性xxxx高清| 日本在线电影一区二区三区| 欧美一区二区三区在线看| 国产伦精品一区二区三区四区视频_| 久久手机免费观看| 国产高清精品在线| 欧美一级大片在线观看| 日本一二三区在线观看| eeuss鲁片一区二区三区| 色呦呦国产精品| 成人在线视频一区二区三区| 午夜福利一区二区三区| 精品影院一区二区久久久| 欧美亚洲第一页| 亚洲色图综合区| 精品久久精品| 日韩成人黄色av| 国产精品嫩草69影院| 欧美xxxx性| 色综合久久久久久久久| 日韩精品在线视频免费观看| 欧美三级理伦电影| 国产三级精品视频| 国产精品视频在线免费观看| 国产尤物视频在线观看| 丝袜a∨在线一区二区三区不卡| 欧美精品videossex性护士| sm捆绑调教视频| 成人在线一区| 一区二区欧美久久| av一区二区三区四区电影| 精品对白一区国产伦| 国产精品久久久久久超碰| 免费观看一级视频| 欧美精品国产一区| 伦伦影院午夜日韩欧美限制| 91精品国自产在线| 最近国产精品视频| 日韩成人中文字幕| 超碰97在线资源站| 久久婷婷国产| 亚洲精品国产电影| 玖玖爱在线精品视频| 久久精品国产亚洲blacked| 精品国产免费一区二区三区香蕉| 亚洲综合伊人久久| 精品国产亚洲一区二区三区| 国产欧美日韩三区| 久久亚洲免费| 污视频网站免费观看| 成人动漫一区二区在线| 国产精品99久久久久久久| 超碰在线观看99| 国产黄人亚洲片| 成人黄色片视频网站| 国产18精品乱码免费看| av一区二区不卡| 蜜桃成人免费视频| 春暖花开成人亚洲区| 国产精品无人区| 一区中文字幕在线观看| 亚洲91av| 五月激情综合网| 四虎永久在线精品无码视频| 成人日韩精品| 欧美福利一区二区| 亚洲最大视频网| 牛牛影视久久网| 亚洲丝袜在线视频| 999精品在线视频| 欧美日本不卡高清| 欧美影院在线播放| 中国精品一区二区| 国产一区二区中文字幕| 性色av香蕉一区二区| 欧美不卡视频在线观看| 欧美综合二区| 91精品视频网站| 欧美熟妇交换久久久久久分类| 久久综合九色综合欧美就去吻| 午夜午夜精品一区二区三区文| 久久黄色美女电影| 亚洲成在线观看| 日韩亚洲在线视频| 国产一区二区三区视频在线| 亚洲高清久久网| 国产成人一区二区在线观看| 一区二区日韩欧美| 热久久视久久精品18亚洲精品| 欧美在线视频精品| 成人小视频免费观看| 热re99久久精品国产99热| 国产视频一区二区| 色综合中文综合网| 日韩精品在线播放视频| 你懂的视频欧美| 欧美黄色成人网| 老熟妇一区二区三区啪啪| 国产成人免费av在线| 日韩av一级大片| 欧美四级在线| 欧美日韩午夜在线视频| 久久福利小视频| 91精品国产91久久久久久黑人| 26uuu另类亚洲欧美日本老年| 一本久道久久综合无码中文| 99视频有精品| 日韩欧美一级在线| 精品免费av一区二区三区| 精品国产露脸精彩对白| 国产精品久久久免费看| 另类av一区二区| 国产不卡一区二区在线观看| 日本在线观看免费| 日本韩国精品在线| 一区二区免费在线观看视频| 中文字幕一区二区三三| 国产精品网红福利| 精品美女视频在线观看免费软件| 亚洲国产精品一区二区久久 | av在线影院| 色偷偷一区二区三区| 黄色激情在线观看| 欧美日韩视频一区二区三区| 国产欧美日韩中文字幕| 精品欧美不卡一区二区在线观看| 欧美日韩免费一区| 中国xxxx性xxxx产国| 在线精品国产| 成人在线一区二区| 日本最黄一级片免费在线| 91久久人澡人人添人人爽欧美| 亚洲欧美日韩色| 欧美激情综合色综合啪啪| 成人av在线网址| 欧美日韩视频在线播放| 欧美日韩一本到| 无码人中文字幕| 久久99精品国产.久久久久久| 色涩成人影视在线播放| 三上悠亚激情av一区二区三区| 日韩经典一区二区三区| 国产精品久久久久久99| 成人美女视频在线看| www.国产在线视频| 久久男人av| 日本国产精品视频| 男女污视频在线观看| 色婷婷亚洲综合| 欧美波霸videosex极品| 欧美aaa在线| 一区二区精品视频| 国产一区二区三区国产精品| 久久影视免费观看| www.天堂av.com| 亚洲成人动漫在线观看| 欧美一区二区三区成人精品| 美女久久网站| 亚洲人成人77777线观看| 日韩成人在线电影| 欧美国产极速在线| 青青视频在线观| 欧美性极品少妇| 永久免费未视频| 国产一区不卡精品| 成人网站免费观看入口| 亚洲精品小区久久久久久| 国产精品第1页| 黄色小网站在线观看| 精品国产在天天线2019| 日韩不卡视频在线| 日本一二三不卡| 日韩精品aaa| 亚洲人www| 四虎一区二区| 嫩呦国产一区二区三区av| 国模极品一区二区三区| 黄色的视频在线免费观看| 7777精品伊人久久久大香线蕉最新版| 免费麻豆国产一区二区三区四区| 97国产精品videossex| 亚洲xxxx2d动漫1| 国产综合网站| 日韩精品久久久| 日韩亚洲精品在线观看| 日本a级片电影一区二区| 国产在线观看a视频| 亚洲国产精久久久久久久| 五月天中文字幕| 午夜激情综合网| 国产jizz18女人高潮| a美女胸又www黄视频久久| 久久国产精品国产精品| 日韩亚洲国产精品| 91社在线播放| 国产videos久久| 高清不卡一区二区三区| 国产精品亚洲一区二区三区在线观看 | 中文字幕一区二区三区四区不卡 | xfplay精品久久| 亚洲网中文字幕| 美女诱惑黄网站一区| 毛片在线视频观看| 成人综合久久| 欧美国产一二三区| 欧美经典一区| 国产精品你懂得| 天堂电影一区| 久久久久久国产精品| 日本www在线观看| 亚洲色图五月天| 色呦呦中文字幕| 日韩情涩欧美日韩视频| 亚洲性在线观看| 91福利在线播放| 五月天综合激情| 一区二区三区在线影院| 91禁男男在线观看| 久久精品一二三| 好吊一区二区三区视频| 国产suv精品一区二区883| 国产永久免费网站| 麻豆精品蜜桃视频网站| 青青在线视频免费| 麻豆成人精品| 日日鲁鲁鲁夜夜爽爽狠狠视频97| 亚洲夜间福利| 麻豆传媒网站在线观看| 国产精品x453.com| 中文字幕精品一区日韩| 波多野结衣的一区二区三区 | 日韩在线无毛| 亚洲成人免费在线视频| 成人精品在线播放| 欧美本精品男人aⅴ天堂| 国产av无码专区亚洲av| 91精品国产综合久久精品性色 | 欧美sm极限捆绑bd| 亚洲av无码一区二区三区dv| 亚洲女人****多毛耸耸8| 国产熟女一区二区| 国产欧美1区2区3区| 亚洲一区二区自偷自拍| 久久精品亚洲精品国产欧美kt∨ | 国产亚洲一区二区三区在线观看| 蜜臀av一区二区三区有限公司| 92精品国产成人观看免费| 在线免费观看污视频| 97se亚洲国产综合自在线不卡 | 国产又粗又黄又爽的视频| 欧美日韩一区二区在线观看视频| 夜夜嗨av禁果av粉嫩avhd| 欧美一区二区在线免费观看| 国产成人毛毛毛片| 亚洲成人精品av| 蜜桃免费在线| 最近更新的2019中文字幕| 成人免费看片| 久久久久久久97| 碰碰在线视频| 国产精品青青在线观看爽香蕉 | aaaaa级少妇高潮大片免费看| 91美女在线观看| 任我爽在线视频| 亚洲资源在线观看| 久久精品久久久久久久| 欧美日韩激情一区| 超碰在线人人干| 亚洲欧美日韩一区二区在线| 欧美三级黄网| 97视频免费观看| 国产福利亚洲| 99超碰麻豆| 精品国产网站| 三级在线免费观看| 欧美一区=区| 又色又爽又黄视频| 97超碰欧美中文字幕| 国精品人伦一区二区三区蜜桃| 亚洲最新在线观看| 波多野结衣一二区| 精品欧美乱码久久久久久1区2区| 神马精品久久| 日韩少妇与小伙激情| 多野结衣av一区| 国产在线视频一区| 羞羞答答一区二区| 最新av在线免费观看| 一区二区国产精品| 男女污污视频网站| 久久蜜桃av一区精品变态类天堂| 亚洲熟女毛茸茸| 欧美丝袜一区二区| 国产视频手机在线| 亚洲欧美综合精品久久成人| 在线你懂的视频| 国产精品91在线观看| caoporn成人| 亚洲综合激情五月| 丝袜亚洲另类丝袜在线| 中文字幕第九页| 国产精品嫩草影院com| 欧美h在线观看| 欧美成人高清电影在线| 日本电影全部在线观看网站视频| 欧美一级黑人aaaaaaa做受| 日韩精品视频一区二区三区| 亚洲欧洲精品一区二区| 久久高清一区| 菠萝菠萝蜜网站| 亚洲在线视频免费观看| 国产精品九九九九| 亚洲系列中文字幕| 特黄毛片在线观看| 国产v亚洲v天堂无码| 欧美大片一区| 激情图片中文字幕| 中文字幕一区二区三区在线播放| а中文在线天堂| 亚洲欧美日韩直播| 最新欧美色图| 精品日本一区二区三区| 一区在线视频观看| 国产吃瓜黑料一区二区| 《视频一区视频二区| 亚洲午夜激情视频| 中文字幕av一区中文字幕天堂| 性感女国产在线| 久久免费99精品久久久久久| 亚洲激情综合| 精品无码国产一区二区三区51安| 夜夜嗨av一区二区三区网页| 精品人妻少妇AV无码专区| 理论片在线不卡免费观看| 四虎永久精品在线| 中文字幕日韩一区二区三区不卡| 蜜臀av一级做a爰片久久| 成熟人妻av无码专区| 欧美日韩一卡二卡三卡| 嫩草香蕉在线91一二三区| 成人黄色中文字幕| 天天做天天爱天天综合网| 在线免费看污网站| 亚洲欧美成人一区二区三区| 国产成人精品亚洲精品色欲| 欧美黑人极品猛少妇色xxxxx| 97久久精品| 欧美精品一区二区三区三州| av在线这里只有精品| 看片网址国产福利av中文字幕| 精品一区二区电影| 免费观看一级欧美片| 日产精品一线二线三线芒果| 免费成人av在线播放| tube国产麻豆| 精品国产伦一区二区三区观看方式| 久操av在线| 免费一区二区三区| 免费久久精品视频| 欧美做爰啪啪xxxⅹ性| 日韩欧美成人午夜| 是的av在线| 亚洲欧美久久234| 国产激情视频一区二区三区欧美| 国产一级在线视频| 亚洲三级 欧美三级| 黄页免费欧美| 霍思燕三级露全乳照| 国产亚洲欧美中文| 99国产精品99| 清纯唯美亚洲激情| 五月天久久777| 国产人妻黑人一区二区三区| 91成人看片片| 制服丝袜在线播放| 欧美色图亚洲自拍| 国产精品原创巨作av| 日本一级片免费看| 爽爽爽爽爽爽爽成人免费观看| 欧美专区视频| 88av.com| 亚洲一区二区三区自拍| 国产区视频在线播放| 99久久无色码|