小程序Vant Weapp的Dialog使用before-close

本文介绍了如何在Vant Weapp的Dialog组件中使用before-close钩子实现异步操作,阻止默认关闭,并提供了详细的代码示例。通过在beforeClose函数中返回Promise,可以控制弹窗在特定条件下的关闭行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

结合使用了组件调用和异步关闭,vant官方文档好像没有考虑过这个问题,参考了大佬的写法
小程序 van-dialog确认时阻止弹窗关闭
Vant/Weapp/Dialog/before-close的用法
vant weapp Dialog中组件调用beforeClose这个是这么用的?
Vant-ui组件 Dialog里的before-close阻止关闭(参考before-close的回调函数的写法)

wxml中

<van-dialog
  use-slot
  slot=""
  z-index="10"
  title="{{ dialogTitle }}"
  show="{{ dialogShow }}"
  before-close="{{beforeClose}}"
  show-cancel-button
>
	//弹窗的内容
</van-dialog>

因为写了befor-close,所以不需要点击关闭和点击确认的函数
bind:close=“onClose”
bind:confirm=“onConfirm”

js中

Page({
  data: {
    dialogTitle: '',
    dialogShow: false,
    beforeClose: {},
    dialogConfirm: 0 //为0的时候不能关闭弹窗
  },
  onLoad: function (options) {
    var that = this
    that.setData({
      beforeClose: (action) => this.onBeforeClose(action)
    })
  },
  onBeforeClose: function(action) {
    return new Promise((resolve) => {
      setTimeout(() => {
        var houseName = that.data.houseValue
        if (action === 'confirm') {
			this.onConfirm()
			var dialogConfirm = this.data.dialogConfirm
			if( dialogConfirm === 0 ){
				resolve(false)
			}else{
            	resolve(true)
			}
        } else {
          // 拦截取消操作
          this.onClose()
          resolve(false)
        }
      }, 500)
    })
  },
})

在需要的条件里面加上resolve(true),实测不加上resolve(true),好像不可以关闭…
需要拦截的条件中加上resolve(false),就可以实现拦截

### Vant Dialog 组件使用方法 #### 函数式调用 当需要简单快捷地展示对话框时,可以采用函数形式来调用 `Dialog`。这种方式适合于只需要快速弹出消息而不涉及复杂交互的情况。 ```javascript import { Dialog } from 'vant'; // 调用后会在页面中央显示一个带有默认样式和内容的模态框 Dialog({ message: '这是一个简单的提示信息' }); ``` 上述代码展示了如何通过导入 `Dialog` 并传入配置对象的方式创建并打开一个新的对话框实例[^1]。 #### 组件式调用 对于更复杂的场景,则推荐使用组件化的方式来构建对话框逻辑。这样不仅可以更好地管理状态还能方便地自定义外观和其他行为特性。 ```html <template> <!-- 定义了一个可控制显隐属性 (v-model) 的 van-dialog --> <van-dialog v-model:show="state.show" title="操作确认"> 是否执行此动作? <template #footer> <button @click="cancel">取消</button> <button @click="confirm">确定</button> </template> </van-dialog> </template> <script setup> import { ref, reactive } from 'vue'; import { Dialog } from 'vant'; const VanDialog = Dialog.Component; const state = reactive({ show: false, }); function cancel() { console.log('点击了取消'); } function confirm() { console.log('点击了确定'); } </script> ``` 这段代码片段说明了怎样利用 Vue Composition API 来声明响应式的 `state` 对象用于追踪对话框的状态变化,并且提供了两个处理程序分别对应“取消”与“确定”的按钮事件监听器[^2]。 #### 自定义按钮文字 如果想要更改默认情况下提供的“确认”以及“取消”按钮上的文本标签,可以通过设置相应属性实现个性化定制: ```html <van-dialog :before-close="onBeforeClose" confirmButtonText="同意条款" cancelButtonText="不同意" /> ``` 这里给出了改变按钮上显示的文字的方法,即直接给定 `confirmButtonText` 和 `cancelButtonText` 属性值即可完成修改工作[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值