当前位置: 首页 > news >正文

van-dialog弹窗异步关闭-校验表单

van-dialog弹窗异步关闭

有时候我们需要通过弹窗去处理表单数据,在原生微信小程序配合vant组件中有多种方式实现,其中UI美观度最高的就是通过van-dialog嵌套表单实现。

在这里插入图片描述

通常表单涉及到是否必填,在van-dialog的确认事件中直接return是无法阻止对话框关闭的,你需要通过异步关闭对话框的方式实现表单校验后的对话框关闭。只有当表单中的必填项全部校验通过才允许确认关闭对话框,否则阻止关闭并给予提醒。

vant的官网提供了一个异步关闭对话框的事件:before-close

在这里插入图片描述

该事件是一个异步函数,你需要在异步函数中返回对话框的关闭状态。

使用方法如下:

  <van-dialog before-close="{{beforeClose}}" use-slot title="编辑指标" 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函数

  data: {beforeClose: null, // 绑定异步关闭函数},

你可以在用户点击确定的时候校验表单,如果校验不通过则调用封装好的异步关闭函数,在promise中返回false阻止对话框关闭。

// 封装异步关闭函数
dialogClost() {this.setData({beforeClose: (action) =>new Promise((resolve) => {if (action === 'confirm') {// 确定按钮resolve(false)} else if (action === 'cancel') {// 取消按钮resolve(true)}}),})},

用户点击确定,校验表单,校验不同过时调用dialogClost函数阻止对话框关闭

// 确定sureDialog() {let { dataForm } = this.data;if (!dataForm.lineType) {wx.showToast({title: '请选择曲线类型',icon: 'none'})return this.dialogClost();}},

这里需要注意:如果使用异步关闭对话框,它会默认替换用户的对话框关闭事件,所以我们需要区分两种场景:
1、校验不通过
2、校验通过
点击取消时,无论校验是否通过都应该关闭弹窗。
点击确定需要校验表单是否通过。
所以你可以通过当前的状态来决定是否关闭弹窗

  dialogClost(type) {this.setData({beforeClose: (action) =>new Promise((resolve) => {if (action === 'confirm') {// 点击确定,根据传入的状态判断是否取消resolve(type)} else if (action === 'cancel') {// 取消则直接关闭resolve(true)}}),})},

调用时:

// 确定sureDialog() {let { dataForm } = this.data;if (!dataForm.lineType) {wx.showToast({title: '请选择曲线类型',icon: 'none'})return this.dialogClost(false); // 表单校验不通过}this.dialogClost(true); // 表单校验通过},

在这里插入图片描述

到这里我们就实现了异步关闭van-dialog弹窗的功能。


如果觉得这篇文章对你有帮助,欢迎点赞👍、收藏💖、转发✨哦~

http://www.lryc.cn/news/233389.html

相关文章:

  • Dynamic Wallpaper 16.7中文版
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • 《网络协议》06. HTTP 补充 · HTTPS · SSL/TLS
  • Python winreg将cmd/PowerShell(管理员)添加到右键菜单
  • redis运维(九)字符串(二)字符串过期时间
  • 【C++】多线程的学习笔记(3)——白话文版(bushi
  • kotlin--3.集合操作
  • 自动驾驶-BEV感知综述
  • 面试题-3
  • C++ Core Guidelines 中文版 GSL
  • 同时显示上下两层凸包特征的可视化程序
  • Django框架之模型层(二)
  • C++之list
  • C语言日记——调试篇
  • 【python】Django——templates模板、静态文件、django模板语法、请求和响应
  • Android设计模式--观察者模式
  • 【Linux】Ubuntu16.04下安装python高版本--源码安装
  • 变长子网划分问题的二叉树解法
  • 编译安装redis及配置多实例
  • 网络(一)总纲
  • WPF中的App类介绍
  • .nc格式文件的显示及特殊裁剪方式
  • 为什么需要线程池?C++如何实现一个线程池?
  • 多视图聚类的论文阅读
  • shell脚本适用场景
  • Bash openldap同步AD组织数据
  • C#WPF文本转语音实例
  • 08-流媒体-RTMP拉流
  • 一键免费去除视频水印和字幕的AI工具
  • 实验六:Android的网络编程基础