如果你希望在生命週期中做到阻塞非同步,es6中雖然提供了aysnc的語法糖,但是在鉤子函式中使用是無法生效的,如:
async
created()
mounted()
//這裡依然會是執行完mounted()中的this.format()之後才執行this.getlist()
原理很簡單,使用async/await的鉤子內部的非同步**是無法起到阻塞鉤子主線程執行的作用的,如果想達到同步執行的效果,應該使用任務佇列的特性,用settimeout()把任務排入佇列裡按順序執行。
有些時候,我們需要使用者輸入的表單資訊帶有固定格式,如手機號碼、銀行卡號,閘道器位址等,如下圖:
如果你使用的是element的input元件,那麼呼叫change事件是不太可行的,必須另外觸發原生的input事件,並且要做到自動補充』-'效果,需要使用正規表示式或自己建立乙個對映關係來做驗證。
同時,手動輸入和複製貼上是觸發不同事件的,但是vue本身元件是不支援的,需要用.native
修飾符來觸發@paste
貼上事件:
v-model
="form.gw_id"
maxlength
="23"
v-on:input
="formatgw_id($event)"
@paste.native
="handlepaste($event)"
placeholder
="23-7c-06-ff-fe-2b-0c-b0"
>
el-input
>
具體如何進行自動補充和判斷是貼上文白還是input手輸文字,則需要我們自己定義乙個變數來監察狀態,具體**邏輯如下:
// 判斷閘道器id的橫槓位置與字母
judgegw_id
(param, mode)
else}if
(mode ===
"f")
else}}
,// 貼上事件
handlepaste
(val)if(
!this
.judgegw_id
(record,
'f'))}
)let result = arr.
slice(0
,23).
join(''
);this
.gwid_paste = result.
touppercase()
},// 自動校正閘道器id內容
formatgw_id
(val)
else
else}}
let newgw_id = result.
join(""
);vue.
set(
this
.form,
"gw_id"
, newgw_id.
touppercase()
);}else
},
需要注意的是,paste事件改變了input框的值,因此凡是貼上都會觸發input事件,所以必須要有乙個變數來表示狀態,告訴input事件此時是輸入的文字還是貼上的文字,如果是貼上的話就不用執行自己的邏輯了,直接拿paste的值作為結果。同時也別想著在paste事件裡直接賦值給檢視,因為肯定會被input事件的結果覆蓋掉,所以最好的做法是處理完文字之後,用個變數儲存,然後傳給input事件。 vue開發元件時踩過的一些坑
近期又完成乙個vue專案,公司好像十分看好vue框架,之後的幾個專案也準備使用vue框架。然而回想起之前,使用vue開發元件時遇到的各種bug,心中一陣後怕。在此記錄下那些填坑的歷程,方便以後查閱。input輸入出現白屏問題 專案要求header部分固定,main部分可以滾動,css3實現main的...
Vue的踩坑記錄1
在做乙個後台管理系統的時候,做了乙個過濾器,使用filter做的,如下 data computed 這樣看起來應該是沒有什麼問題的,我的輸入框已經雙向繫結好了filterdata,首先說明,是可以進行篩選的,功能正常,問題來了,當我需要在某tabledata裡寫入引數傳到後台的跟新資料的時候開始出大...
關於PHP錯誤日誌踩過的一些坑
關於php錯誤日誌踩過的一些坑 ddaidai 0.286 2017.08.09 15 45 43 字數 1,009 閱讀 3,534 對於線上的專案來說,錯誤日誌和訪問日誌是至關重要的。學會如何分析日誌找出問題是乙個必備技能。本文就談談關於php的錯誤日誌那些事。phpinfo 中 local v...