van-dialog彈窗異步關(guān)閉功能-校驗表單實現(xiàn)
van-dialog彈窗異步關(guān)閉
有時候我們需要通過彈窗去處理表單數(shù)據(jù),在原生微信小程序配合vant
組件中有多種方式實現(xiàn),其中UI美觀度最高的就是通過van-dialog
嵌套表單實現(xiàn)。
通常表單涉及到是否必填,在van-dialog
的確認(rèn)事件中直接return
是無法阻止對話框關(guān)閉的,你需要通過異步關(guān)閉對話框的方式實現(xiàn)表單校驗后的對話框關(guān)閉。只有當(dāng)表單中的必填項全部校驗通過才允許確認(rèn)關(guān)閉對話框,否則阻止關(guān)閉并給予提醒。
在vant
的官網(wǎng)提供了一個異步關(guān)閉對話框的事件:before-close
該事件是一個異步函數(shù),你需要在異步函數(shù)中返回對話框的關(guān)閉狀態(tài)。
使用方法如下:
<van-dialog before-close="{{beforeClose}}" use-slot title="編輯指標(biāo)" show="{{ editShow }}" show-cancel-button bind:close="onClose" bind:confirm="sureDialog" confirm-button-color="#3d7fff"> <view class="edit_chunk"> <!-- 這里寫自定義的表單...... --> </view> </van-dialog>
這里用到了before-close="{{beforeClose}}"
方法,它指向的是data
中的beforeClose
函數(shù)
data: { beforeClose: null, // 綁定異步關(guān)閉函數(shù) },
你可以在用戶點擊確定的時候校驗表單,如果校驗不通過則調(diào)用封裝好的異步關(guān)閉函數(shù),在promise
中返回false
阻止對話框關(guān)閉。
// 封裝異步關(guān)閉函數(shù) dialogClost() { this.setData({ beforeClose: (action) => new Promise((resolve) => { if (action === 'confirm') { // 確定按鈕 resolve(false) } else if (action === 'cancel') { // 取消按鈕 resolve(true) } }), }) },
用戶點擊確定,校驗表單,校驗不同過時調(diào)用dialogClost
函數(shù)阻止對話框關(guān)閉
// 確定 sureDialog() { let { dataForm } = this.data; if (!dataForm.lineType) { wx.showToast({ title: '請選擇曲線類型', icon: 'none' }) return this.dialogClost(); } },
這里需要注意:如果使用異步關(guān)閉對話框,它會默認(rèn)替換用戶的對話框關(guān)閉事件,所以我們需要區(qū)分兩種場景:
1、校驗不通過
2、校驗通過
點擊取消時,無論校驗是否通過都應(yīng)該關(guān)閉彈窗。
點擊確定需要校驗表單是否通過。
所以你可以通過當(dāng)前的狀態(tài)來決定是否關(guān)閉彈窗
dialogClost(type) { this.setData({ beforeClose: (action) => new Promise((resolve) => { if (action === 'confirm') { // 點擊確定,根據(jù)傳入的狀態(tài)判斷是否取消 resolve(type) } else if (action === 'cancel') { // 取消則直接關(guān)閉 resolve(true) } }), }) },
調(diào)用時:
// 確定 sureDialog() { let { dataForm } = this.data; if (!dataForm.lineType) { wx.showToast({ title: '請選擇曲線類型', icon: 'none' }) return this.dialogClost(false); // 表單校驗不通過 } this.dialogClost(true); // 表單校驗通過 },
到這里我們就實現(xiàn)了異步關(guān)閉van-dialog彈窗的功能。
到此這篇關(guān)于van-dialog彈窗異步關(guān)閉-校驗表單的文章就介紹到這了,更多相關(guān)van-dialog彈窗異步關(guān)閉-校驗表單內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue中內(nèi)嵌iframe的src更新頁面未刷新問題及解決
這篇文章主要介紹了vue中內(nèi)嵌iframe的src更新頁面未刷新問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-12-12@click.native和@click的區(qū)別及說明
這篇文章主要介紹了@click.native和@click的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08<el-button>點擊后如何跳轉(zhuǎn)指定url鏈接
這篇文章主要介紹了<el-button>點擊后如何跳轉(zhuǎn)指定url鏈接問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-04-04關(guān)于vue 的slot分發(fā)內(nèi)容 (多個分發(fā))
這篇文章主要介紹了關(guān)于vue 的slot分發(fā)內(nèi)容 (多個分發(fā)),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03Vue.js Ajax動態(tài)參數(shù)與列表顯示實現(xiàn)方法
Vue.js是一個輕巧、高性能、可組件化的MVVM庫,同時擁有非常容易上手的API。下面通過本文給大家介紹vue.js ajax動態(tài)參數(shù)與列表顯示實現(xiàn)方法,感興趣的朋友一起看看吧2016-10-10vue+element的表格實現(xiàn)批量刪除功能示例代碼
這篇文章主要介紹了vue+element的表格實現(xiàn)批量刪除功能示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-08-08