电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

vue實現表單未編輯或未保存離開彈窗提示功能

瀏覽:116日期:2023-01-28 09:40:58

說明

UI組件是使用 Quasar Framework 。

最近做一個表單彈出框,表單保存提交,但是,產品提出,用戶不保存,而關閉彈出框時,要給出一個彈窗提示。這個功能,可以用watch監聽表單數據。當數據表單發生變化,用戶點擊了關閉按鈕,則根據監聽結果來判斷用戶輸入或編輯了數據,進而出現彈窗提示,讓用戶選擇是否離開;當數據沒發生變化,則不必提示。

確認離開提示框

實現效果

先實現一個確認離開提示框,效果如下:

vue實現表單未編輯或未保存離開彈窗提示功能

實現代碼:

<template> <div> <q-dialog :persistent='true' v-model='alert'> <q-card style='width:340px;'> <q-card-section> <q-btn icon='close' flat round dense v-close-popup /> </q-card-section> <q-card-section style='margin-top: 10px;'> 當前數據未保存,是否離開? </q-card-section> <q-card-actions align='right'> <q-btn flat label='是' color='primary' v-close-popup @click='handleConfirm' /> <q-btn flat label='否' v-close-popup /> </q-card-actions> </q-card> </q-dialog> </div></template><script>export default { name: ’LeaveTipDialog’, props: { }, data () { return { alert: false } }, methods: { init () { this.alert = true }, handleConfirm () { // 提交父組件的事件 this.$emit(’handleConfirm’) } }}</script><style lang='stylus'></style>

監聽代碼

監聽代碼如下:

watch: { datas: { handler (val) { if (val) { this.count++ } }, deep: true } },

判斷數據變化的次數,因為剛加載數據未完全加載的時候,datas是空對象,待加載完之后,則出現一次數據變化, deep主要是深層次監聽,因為數據是層層對象,比較復雜

創建/編輯 表單彈出框

代碼,表單省略了,大致抽象為:

<template> <div> <q-dialog :persistent='true' v-model='visible'> <q-card class='card'> <q-card-section transition-hide='flip-up'> <div class='text-h6'>{{ isEdit ? '編輯' : '創建' }}xxxx</div> <q-space /> <q-btn icon='close' flat round dense @click='close' /> </q-card-section> <q-card-section class='form'> <div class='line'></div> <q-form ref='form'> <!-- 省略了表單行 --> </q-form> </q-card-section> </q-card> </q-dialog> <!-- 彈窗 關閉 編輯/創建時 確認離開--> <LeaveTipDialog v-if='leave' ref='leave' @handleConfirm='handleLeave' ></LeaveTipDialog> </div></template>

引入上面寫好的確認離開提示框組件:

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)表單沒有輸入任何值,直接點擊關閉,直接表單彈出框;

vue實現表單未編輯或未保存離開彈窗提示功能

2、編輯詳情的數據表單彈出框:

1)表單內容有編輯情況,未保存點擊關閉,給出一個彈窗提示“當前數據未保存,是否離開?”,選擇是,關閉表單彈出框;選擇否,表單彈出框不關閉;

2)表單內容沒有編輯任何值,直接點擊關閉,直接表單彈出框;

vue實現表單未編輯或未保存離開彈窗提示功能

總結

到此這篇關于vue實現表單未編輯或未保存離開彈窗提示功能的文章就介紹到這了,更多相關vue表單離開彈窗提示內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Vue
相關文章:
主站蜘蛛池模板: 户外-组合-幼儿园-不锈钢-儿童-滑滑梯-床-玩具-淘气堡-厂家-价格 | 工业设计,人工智能,体验式3D展示的智能技术交流服务平台-纳金网 J.S.Bach 圣巴赫_高端背景音乐系统_官网 | 江苏农村商业银行招聘网_2024江苏农商行考试指南_江苏农商行校园招聘 | 无痕胶_可移胶_无痕双面胶带_可移无痕胶厂家-东莞凯峰 | 雪花制冰机(实验室雪花制冰机)百科 | 德州网站制作 - 网站建设设计 - seo排名优化 -「两山建站」 | 合肥白癜风医院_合肥治疗白癜风医院_合肥看白癜风医院哪家好_合肥华研白癜风医院 | 杭州月嫂技术培训服务公司-催乳师培训中心报名费用-产后康复师培训机构-杭州优贝姆健康管理有限公司 | 撕碎机_轮胎破碎机_粉碎机_回收生产线厂家_东莞华达机械有限公司 | 包塑丝_高铁绑丝_地暖绑丝_涂塑丝_塑料皮铁丝_河北创筹金属丝网制品有限公司 | 车载加油机品牌_ 柴油加油机厂家 | 馋嘴餐饮网_餐饮加盟店火爆好项目_餐饮连锁品牌加盟指南创业平台 | 美侍宠物-专注宠物狗及宠物猫训练|喂养|医疗|繁育|品种|价格 | 网架支座@球铰支座@钢结构支座@成品支座厂家@万向滑动支座_桥兴工程橡胶有限公司 | 电镀整流器_微弧氧化电源_高频电解电源_微弧氧化设备厂家_深圳开瑞节能 | 山东彩钢板房,山东彩钢活动房,临沂彩钢房-临沂市贵通钢结构工程有限公司 | 萃取箱-萃取槽-PVC萃取箱厂家-混合澄清槽- 杭州南方化工设备 | 热熔胶网膜|pes热熔网膜价格|eva热熔胶膜|热熔胶膜|tpu热熔胶膜厂家-苏州惠洋胶粘制品有限公司 | 岩棉板|岩棉复合板|聚氨酯夹芯板|岩棉夹芯板|彩钢夹芯板-江苏恒海钢结构 | 十二星座查询(性格特点分析、星座运势解读) - 玄米星座网 | 对辊破碎机-液压双辊式,强力双齿辊,四辊破碎机价格_巩义市金联机械设备生产厂家 | 精密光学实验平台-红外粉末压片机模具-天津博君 | 安徽合肥格力空调专卖店_格力中央空调_格力空调总经销公司代理-皖格制冷设备 | 净化车间_洁净厂房_净化公司_净化厂房_无尘室工程_洁净工程装修|改造|施工-深圳净化公司 | 继电器模组-IO端子台-plc连接线-省配线模组厂家-世麦德 | 泰国试管婴儿_泰国第三代试管婴儿_泰国试管婴儿费用/多少钱_孕泰来 | 西安展台设计搭建_西安活动策划公司_西安会议会场布置_西安展厅设计西安旭阳展览展示 | 芝麻黑-芝麻黑石材厂家-永峰石业| 骨密度检测仪_骨密度分析仪_骨密度仪_动脉硬化检测仪专业生产厂家【品源医疗】 | 施工围挡-施工PVC围挡-工程围挡-深圳市旭东钢构技术开发有限公司 | 铸铝门厂家,别墅大门庭院大门,别墅铸铝门铜门[十大品牌厂家]军强门业 | 通辽信息港 - 免费发布房产、招聘、求职、二手、商铺等信息 www.tlxxg.net | 博医通医疗器械互联网供应链服务平台_博医通| 北京遮阳网-防尘盖土网-盖土草坪-迷彩网-防尘网生产厂家-京兴科技 | 安徽泰科检测科技有限公司【官方网站】| 篷房[仓储-婚庆-展览-活动]生产厂家-江苏正德装配式帐篷有限公司 | 拉曼光谱仪_便携式|激光|显微共焦拉曼光谱仪-北京卓立汉光仪器有限公司 | PCB厂|线路板厂|深圳线路板厂|软硬结合板厂|电路板生产厂家|线路板|深圳电路板厂家|铝基板厂家|深联电路-专业生产PCB研发制造 | 东莞喷砂机-喷砂机-喷砂机配件-喷砂器材-喷砂加工-东莞市协帆喷砂机械设备有限公司 | 间甲酚,间甲酚厂家-山东祥东新材料 | 恒温槽_恒温水槽_恒温水浴槽-上海方瑞仪器有限公司 |