中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

如何解決Vue.js應(yīng)用回退或刷新界面時(shí)提示用戶保存修改問題

這篇文章給大家分享的是有關(guān)如何解決Vue.js應(yīng)用回退或刷新界面時(shí)提示用戶保存修改問題的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。

創(chuàng)新互聯(lián)建站堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的牟平網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

在實(shí)際應(yīng)用中,運(yùn)營人員在編輯數(shù)據(jù)時(shí)不希望因不小心點(diǎn)擊了瀏覽器的回退或刷新按鈕導(dǎo)致花費(fèi)了很長時(shí)間編輯的數(shù)據(jù)丟失??梢圆捎靡韵聝煞N手段防止運(yùn)營編輯時(shí)丟失數(shù)據(jù):

在運(yùn)營人員刷新頁面或回退時(shí),自動(dòng)保留數(shù)據(jù)至瀏覽器端本地存儲,在重新進(jìn)入編輯頁面時(shí)再將數(shù)據(jù)從本地存儲中加載到編輯界面。
第二種方法是在運(yùn)營人員刷新或回退時(shí),強(qiáng)提示運(yùn)營人員有修改的數(shù)據(jù)尚未保存,詢問是否繼續(xù)。

無認(rèn)采用哪一種方式,在技術(shù)實(shí)現(xiàn)上,我們需要首先能夠監(jiān)聽到用戶執(zhí)行回退或刷新頁面的動(dòng)作。

實(shí)際上,當(dāng)用戶執(zhí)行頁面刷新時(shí),會(huì)觸發(fā) window 對象上的 onBeforeUnload 事件。所以,我們需要在頁面加載時(shí)開始監(jiān)聽此事件。在Vue.js應(yīng)用中,我們可以在Vue.js的 mounted 生命周期事件函數(shù)中開始監(jiān)聽。

mounted() {
  window.onbeforeunload = e => {
    if (!this.modified) {
    return;
    }
    // 通知瀏覽器不要執(zhí)行與事件關(guān)聯(lián)的默認(rèn)動(dòng)作
    e.preventDefault();
    // Chrome 需要 returnValue 被設(shè)置成空字符串
    e.returnValue = '';
  };
},

有了以上的代碼,只要我們在修改了數(shù)據(jù)以后,將 modified 的值改為true,則可以在刷新整個(gè)頁面時(shí)彈出如下提示:

如何解決Vue.js應(yīng)用回退或刷新界面時(shí)提示用戶保存修改問題 

當(dāng)用戶點(diǎn)擊上述對話框的[ 取消 ]按鈕后,會(huì)取消刷新動(dòng)作,當(dāng)用戶選擇[ 重新加載 ]后,瀏覽器會(huì)強(qiáng)制進(jìn)行頁面的刷新。

由于在Vue.js應(yīng)用中,通常是一個(gè)頁面的應(yīng)用,所有的子頁面享用一個(gè)window對象,所以,如果在一個(gè)Vue.js頁面組件中增加了對onBeforUnload事件的監(jiān)聽,則可能會(huì)影響其它頁面組件的相關(guān)行為,而在其他頁面(如,僅瀏覽數(shù)據(jù)的頁面)是不希望進(jìn)行相關(guān)的提示的,所以,我們需要在Vue.js組件卸載的時(shí)候取消對onBeforeUnload事件的監(jiān)聽。

destroyed() {
  // 取消對事件的監(jiān)聽
  window.onbeforeunload = null;
  },

用戶除了通過瀏覽器刷新操作退出外,還有兩種可能的退出途徑:

  • 點(diǎn)擊瀏覽器的前進(jìn)或回退操作按鈕

  • 點(diǎn)擊單頁面中的前端路由鏈接

對于以上兩種退出途徑,onBeforeLoad事件通常是攔截不到相應(yīng)的事件的,因?yàn)檫@兩種操作一般是前端路由的行為。

既然是前端路由的行為,我們就需要在前端路由事件上下功夫??上驳氖?,前端路由vue-router為我們提供了 導(dǎo)航守衛(wèi) 的能力。關(guān)于vue-router導(dǎo)航守衛(wèi)的相關(guān)知識,大家可以參考: vue-router前端路由導(dǎo)航守衛(wèi) 。

前端路由導(dǎo)航守衛(wèi)分為全局守衛(wèi)、獨(dú)享守衛(wèi)、組件內(nèi)守衛(wèi)等。這里我們使用的是組件內(nèi)守衛(wèi)。

組件內(nèi)守衛(wèi)有以下三種

  • beforeRouteEnter 組件第一次被渲染時(shí)調(diào)用

  • beforeRouteUpdate 路由改變但組件被復(fù)用時(shí)調(diào)用

  • beforeRouteLeave 導(dǎo)航離開組件時(shí)調(diào)用

顯而易見,我們需要監(jiān)聽并處理 beforeRouteLeave 事件。

beforeRouteLeave(to, from, next) {
  if (!this.modified) {
    next();
    return;
  }
  this.$confirm('當(dāng)前頁面數(shù)據(jù)未保存,確定要離開?', '提示', { type: 'warning' })
  .then(() => {
    next();
  })
  .catch(() => {
   next(false);
  });
},

有了以上的代碼,當(dāng)我們在進(jìn)行路由切換時(shí)(點(diǎn)擊瀏覽器回退按鈕或點(diǎn)擊頁面中的其它路由鏈接)就會(huì)提示如下的對話框:

如何解決Vue.js應(yīng)用回退或刷新界面時(shí)提示用戶保存修改問題 

當(dāng)用戶選擇取消時(shí),回到原界面,當(dāng)用戶點(diǎn)擊確定按鈕后,頁面強(qiáng)制刷新。

感謝各位的閱讀!關(guān)于“如何解決Vue.js應(yīng)用回退或刷新界面時(shí)提示用戶保存修改問題”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

分享文章:如何解決Vue.js應(yīng)用回退或刷新界面時(shí)提示用戶保存修改問題
文章起源:http://www.rwnh.cn/article2/gshsoc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、微信公眾號、建站公司網(wǎng)站設(shè)計(jì)、品牌網(wǎng)站建設(shè)、用戶體驗(yàn)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

營銷型網(wǎng)站建設(shè)
乌兰察布市| 湘潭市| 漳州市| 盐边县| 沁阳市| 五大连池市| 桓台县| 六盘水市| 塔城市| 玉林市| 高青县| 嘉荫县| 墨竹工卡县| 昌吉市| 成武县| 沙河市| 贵溪市| 旅游| 平乐县| 灵璧县| 凤阳县| 南溪县| 临夏市| 旬邑县| 浦城县| 宜川县| 临沭县| 云南省| 锦屏县| 成武县| 邵阳市| 台山市| 苏尼特右旗| 乐都县| 弥渡县| 六枝特区| 都匀市| 开阳县| 陕西省| 蕲春县| 南开区|