oracle vue 退出,vue实现表单未编辑或未保存离开弹窗提示功能

本文介绍了如何在Vue应用中实现表单弹窗提示功能,当用户未保存表单修改就尝试关闭时,会显示一个确认离开的提示框。通过watch监听表单数据变化,结合关闭操作的逻辑判断,确保在数据有变动时提醒用户。该功能适用于新建和编辑两种场景,确保用户体验和数据完整性。
摘要由CSDN通过智能技术生成

说明

最近做一个表单弹出框,表单保存提交,但是,产品提出,用户不保存,而关闭弹出框时,要给出一个弹窗提示。这个功能,可以用watch监听表单数据。当数据表单发生变化,用户点击了关闭按钮,则根据监听结果来判断用户输入或编辑了数据,进而出现弹窗提示,让用户选择是否离开;当数据没发生变化,则不必提示。

确认离开提示框

实现效果

先实现一个确认离开提示框,效果如下:

03fbc55434ddafc494afaefa08a3bf6a.png

实现代码:

当前数据未保存,是否离开?

flat

label="是"

color="primary"

v-close-popup

@click="handleConfirm"

/>

export default {

name: 'LeaveTipDialog',

props: {

},

data () {

return {

alert: false

}

},

methods: {

init () {

this.alert = true

},

handleConfirm () {

// 提交父组件的事件

this.$emit('handleConfirm')

}

}

}

监听代码

监听代码如下:

watch: {

datas: {

handler (val) {

if (val) {

this.count++

}

},

deep: true

}

},

判断数据变化的次数,因为刚加载数据未完全加载的时候,datas是空对象,待加载完之后,则出现一次数据变化, deep主要是深层次监听,因为数据是层层对象,比较复杂

创建/编辑 表单弹出框

代码,表单省略了,大致抽象为:

transition-hide="flip-up"

class="row items-center q-pb-none"

style="padding-top: 10px;"

>

{{ isEdit ? "编辑" : "创建" }}xxxx

v-if="leave"

ref="leave"

@handleConfirm="handleLeave"

>

引入上面写好的确认离开提示框组件:

import LeaveTipDialog from 'components/LeaveTipDialog'

props: {

isEdit: {

type: Boolean,

required: true,

default: false

}

},

components: {

LeaveTipDialog

},

data () {

return {

visible: false,

form: {

// .... 具体省略

},

count: 0, // form数据修改的数量

leave: false

}

},

watch: {

form: {

handler (val) {

if (val) {

this.count++

}

},

deep: true

}

},

关闭时判断的代码逻辑:

注意,监听获取到的 count ,分为两种情况:

1、当打开的是新建数据的表单,那么一开始, form 的数据是空内容或者默认值,当用户输入了内容,点击关闭按钮,获取到的 this.count 是1或者更大的值。所以, isEdit 为 fasle 时,判断条件是!this.isEdit && this.count > 0时弹出提示,否则不提示直接关闭表单弹出框。

2、当打开的是编辑数据的表单,那么一开始, form 的数据是空内容或者默认值,当打开表单弹框时,先获取了数据详情内容并赋值费表单 form 数据,此时 this.count的值已经是1了。这时,当用户编辑了表单内容,点击关闭按钮,获取到的 this.count 是大于1的值。所以, isEdit 为 true 时,判断条件是this.isEdit && this.count > 1 时弹出提示,否则不提示直接关闭表单弹出框。

methods: {

close () {

// console.log(`isEdit:${this.isEdit}:${this.count}`)

if (this.isEdit && this.count > 1) {

// 编辑 数据有修改弹出提示

this.leave = true

this.$nextTick(() => {

this.$refs.leave.init()

})

} else if (!this.isEdit && this.count > 0) {

// 新建 数据有修改弹出提示

this.leave = true

this.$nextTick(() => {

this.$refs.leave.init()

})

} else {

this.resetForm()

this.leave = false

this.visible = false

}

},

handleLeave () {

this.resetForm()

this.leave = false

this.visible = false

},

resetForm(){

// this.form.xxxx = '' // 表单数据清空

this.count = 0

}

}

实现效果

1、新建数据表单弹出框:

1)表单有输入,未保存点击关闭,给出一个弹窗提示“当前数据未保存,是否离开?”,选择是,关闭表单弹出框;选择否,表单弹出框不关闭;

2)表单没有输入任何值,直接点击关闭,直接表单弹出框;

4793c743d300d50be63a7359d6901f23.png

2、编辑详情的数据表单弹出框:

1)表单内容有编辑情况,未保存点击关闭,给出一个弹窗提示“当前数据未保存,是否离开?”,选择是,关闭表单弹出框;选择否,表单弹出框不关闭;

2)表单内容没有编辑任何值,直接点击关闭,直接表单弹出框;

47fdbe6f8b37d152da90d349363aad06.png

总结

到此这篇关于vue实现表单未编辑或未保存离开弹窗提示功能的文章就介绍到这了,更多相关vue表单离开弹窗提示内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值