端技術之:Vue.js應用回退或重新整理介面時提示使用者儲存修改
在實際應用中,運營人員在編輯資料時不希望因不小心點選了瀏覽器的回退或重新整理按鈕導致花費了很長時間編輯的資料丟失。可以採用以下兩種手段防止運營編輯時丟失資料:
- 在運營人員重新整理頁面或回退時,自動保留資料至瀏覽器端本地儲存,在重新進入編輯頁面時再將資料從本地儲存中載入到編輯介面。
- 第二種方法是在運營人員重新整理或回退時,強提示運營人員有修改的資料尚未儲存,詢問是否繼續。
無認採用哪一種方式,在技術實現上,我們需要首先能夠監聽到使用者執行回退或重新整理頁面的動作。
實際上,當使用者執行頁面重新整理時,會觸發
window
物件上的
onBeforeUnload
事件。所以,我們需要在頁面載入時開始監聽此事件。在Vue.js應用中,我們可以在Vue.js的
mounted
生命週期事件函式中開始監聽。
mounted() {
window.onbeforeunload = e => {
if (!this.modified) {
return;
}
// 通知瀏覽器不要執行與事件關聯的預設動作
e.preventDefault();
// Chrome 需要 returnValue 被設定成空字串
e.returnValue = '';
};
},
有了以上的程式碼,只要我們在修改了資料以後,將
modified
的值改為true,則可以在重新整理整個頁面時彈出如下提示:
當使用者點選上述對話方塊的[ 取消]按鈕後,會取消重新整理動作,當使用者選擇[ 重新載入]後,瀏覽器會強制進行頁面的重新整理。
由於在Vue.js應用中,通常是一個頁面的應用,所有的子頁面享用一個window物件,所以,如果在一個Vue.js頁面元件中增加了對onBeforUnload事件的監聽,則可能會影響其它頁面元件的相關行為,而在其他頁面(如,僅瀏覽資料的頁面)是不希望進行相關的提示的,所以,我們需要在Vue.js元件解除安裝的時候取消對onBeforeUnload事件的監聽。
destroyed() {
// 取消對事件的監聽
window.onbeforeunload = null;
},
使用者除了通過瀏覽器重新整理操作退出外,還有兩種可能的退出途徑:
- 點選瀏覽器的前進或回退操作按鈕
- 點選單頁面中的前端路由連結
對於以上兩種退出途徑,onBeforeLoad事件通常是攔截不到相應的事件的,因為這兩種操作一般是前端路由的行為。
既然是前端路由的行為,我們就需要在前端路由事件上下功夫。可喜的是,前端路由vue-router為我們提供了
導航守衛
的能力。關於vue-router導航守衛的相關知識,大家可以參考:
vue-router前端路由導航守衛。
前端路由導航守衛分為全域性守衛、獨享守衛、元件內守衛等。這裡我們使用的是元件內守衛。
元件內守衛有以下三種
- beforeRouteEnter 元件第一次被渲染時呼叫
- beforeRouteUpdate 路由改變但元件被複用時呼叫
- beforeRouteLeave 導航離開元件時呼叫
顯而易見,我們需要監聽並處理
beforeRouteLeave
事件。
beforeRouteLeave(to, from, next) {
if (!this.modified) {
next();
return;
}
this.$confirm('當前頁面資料未儲存,確定要離開?', '提示', { type: 'warning' })
.then(() => {
next();
})
.catch(() => {
next(false);
});
},
有了以上的程式碼,當我們在進行路由切換時(點選瀏覽器回退按鈕或點選頁面中的其它路由連結)就會提示如下的對話方塊:
當使用者選擇取消時,回到原介面,當使用者點選確定按鈕後,頁面強制重新整理。
以上是本人在實際專案應用中遇到的問題及我們採取的解決方案,如果您有更好的方法,或者有更好的建議,歡迎不吝賜教。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69949941/viewspace-2665466/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 《客戶端儲存技術》總結客戶端
- 《客戶端儲存技術》讀後感客戶端
- 前端儲存技術前端
- 區塊鏈技術應用場景思考-去中心化儲存區塊鏈中心化
- 客戶端(瀏覽器端)資料儲存技術概覽客戶端瀏覽器
- 分散式儲存技術解讀系列之GFS分散式
- openGauss儲存技術(一)——行儲存引擎儲存引擎
- 雲端計算導論 # 3 雲端儲存技術:概念、結構模型、關鍵技術、分散式資料儲存、常見儲存結構、應用與問題模型分散式
- Linux系統在儲存技術中的幾項應用(轉)Linux
- Jquery 離開頁面時提示儲存jQuery
- Ceph儲存後端ObjectStore架構和技術演進後端Object架構
- 分散式系統技術:儲存之資料庫分散式資料庫
- 雲端儲存的技術原理
- InnoDB儲存引擎——Checkpoint技術儲存引擎
- 雲端儲存技術體系
- CUUG筆記 儲存技術筆記
- 分散式儲存技術概念分散式
- 雲端計算儲存技術
- 超越 Cookie:當今的客戶端資料儲存技術Cookie客戶端
- 區塊鏈技術教育資料儲存管理系統開發_區塊鏈技術應用方案區塊鏈
- greenDAO資料庫之修改儲存地址資料庫
- Linux 輸出或儲存終端顯示Linux
- [技術思考]分散式儲存系統的雪崩效應分散式
- HTML5離線應用與客戶端儲存HTML客戶端
- 前端儲存技術Cookie,Storage,IndexedDB前端CookieIndex
- 浪潮儲存基於智慧運維技術,加速儲存自治運維
- 三層儲存技術保障雲服務的儲存安全
- 資料加密新技術-實時雲渲染技術應用加密
- Win10系統下怎麼修改Office應用中自動儲存文件的時間Win10
- Redis_RDB持久化之寫時複製技術的應用Redis持久化
- 不同體系分散式儲存技術的技術特性分散式
- 區塊鏈技術應用資料上鍊儲存軟體系統開發區塊鏈
- 區塊鏈技術落地應用電商溯源baas系統,資料上鍊儲存區塊鏈
- 資料上鍊儲存,深圳區塊鏈技術底層應用落地服務區塊鏈
- AIX HACMP使用EMC儲存時的引數修改AIACM
- 技術週刊(2019-01-14 客戶端儲存 )客戶端
- Android的3種資料儲存技術(一)File儲存Android
- 中端儲存不能承受之重薦