首页 > 其他分享 >van-dialog弹窗异步关闭-校验表单

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

时间:2023-11-15 19:34:44浏览次数:40  
标签:异步 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弹窗的功能。


如果觉得这篇文章对你有帮助,欢迎点赞

标签:异步,van,dialog,对话框,校验,表单,关闭,弹窗
From: https://www.cnblogs.com/wang-fan-w/p/17834598.html

相关文章

  • ElementUI的Dialog弹窗实现拖拽移动功能
    在项目中使用el-dialog中发现不能够拖拽移动,因此网上找了相关资料,使用自定义指令实现拖拽功能。1、创建自定义指令:新建文件directive/el-drag-dialog/index.jsimportdragfrom"./drag";constinstall=function(Vue){Vue.directive("el-drag-dialog",drag);};if(wind......
  • element ui 设置el-dialog2级弹窗
    步骤1,通过<el-buttontype="text"@click="dialogTableVisible=true">添加活动</el-button>弹出第一层,themeData设置成你循环的数据<el-buttontype="text"@click="dialogTableVisible=true">添加活动</el-button><!--第一层弹......
  • Advanced diagnostic tools from Autonumen.com
     TheCNHDPA5DiagnosticKit,JohnDeereServiceAdvisorEDLV2DiagnosticTool,PorscheTesterPIWISIII,NexiqUSBLink2,andGMTech2arealladvanceddiagnostictoolsusedintheautomotiveindustry.Thesetoolsaredesignedtoassisttechniciansi......
  • vue2 vant2 智慧商城
       最近学这个......
  • VMware NSX Advanced Load Balancer (NSX ALB) 22.1.5 - 多云负载均衡平台
    VMwareNSXAdvancedLoadBalancer(NSXALB)22.1.5-多云负载均衡平台应用交付:多云负载均衡、Web应用防火墙和容器Ingress服务请访问原文链接:https://sysin.org/blog/vmware-nsx-alb-22/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org负载均衡平台NSXAdvan......
  • layui弹框提示按回车事件一直不停弹窗
    如下界面,敲回车后一直不停弹窗,确定的事件也不执行 解决问题方法:在确认事件前面加上$(':focus').blur();如下所示,问题得到解决$(':focus').blur();layer.confirm(msg,{icon:3,title:'提示',success:function(){this.enterEsc=function......
  • elementplus弹窗可拖拽draggable,点击空白处不消失close-on-click-modal,modal是否去掉
    <el-dialog:modal="false"v-model="dialogVisible"title=""width="30%"draggable:close-on-click-modal="false"class="message-dialog"></el-dialog&g......
  • 基于Vant Weapp的生日管家
    目前市面上提供了一些免费开源的第三方小程序UI组件库,可以下载后放到项目文件夹中直接使用,比起开发者从头开始自定义组件更为方便、高效。本次考虑使用第三方UI组件来实现界面的视觉统一。本次以有赞第三方UI组件库VantWeapp为例,介绍如何使用自定义组件配合云开发中的数据库基本......
  • 2023-8-24 Quantom Computational Advantage Using Pertons 光量子计算优越性 2023人
    QuantomComputationalAdvantageUsingPertons光量子计算优越性|2023人工智能大会青年科学家论坛钟瀚森上海人工智能实验室论文背景:量子计算有望在许多重要任务上实现超越经典的计算能力。但长期以来受限于实验技术,无法在实际任务上演示超越经典计算机的性能。论文成......
  • 获取图片并进行图片切换(FolderBrowserdDialog and OpenFileDialog用法)
    winform布局如下图: 获取文件夹按钮,通过FolderBrowserDialog对话框,选择本地电脑文件路径,后台代码实现如下:privatevoidbutton1_Click(objectsender,EventArgse){folderBrowserDialog1.Description="请选择需要保存的路径";......