如何在Angular項(xiàng)目里監(jiān)聽(tīng)頁(yè)面關(guān)閉、跳轉(zhuǎn)事件?

在用戶操作網(wǎng)頁(yè)時(shí),我們有時(shí)需要監(jiān)聽(tīng)用戶關(guān)閉或者跳轉(zhuǎn)網(wǎng)頁(yè)的行為,比如像在線編輯工具,如果用戶沒(méi)有提交、保存就關(guān)閉頁(yè)面,那一切更新的數(shù)據(jù)都會(huì)丟失,如何防止這一現(xiàn)象發(fā)生?本文提供了一種解決辦法,但不是很友好,不得已而為之。

關(guān)于頁(yè)面/瀏覽器關(guān)閉事件,onbeforeunload依舊可行,不過(guò)如果使用者禁止了這一事件,那就改換別的辦法吧。

關(guān)于頁(yè)面跳轉(zhuǎn),也就是網(wǎng)址發(fā)生變化,如果要監(jiān)聽(tīng)路由變化,有兩種情況:

  1. 用ng-route路由,就使用$locationChangeStart事件:
    $scope.$on('$locationChangeStart', function( event ) {
    var answer = confirm("Are you sure you want to leave this page?")
    if (!answer) {
    event.preventDefault();
    }
    });
    2.用ui-route路由,就使用$stateChangeStart事件:
    $scope.$on('$stateChangeStart', function(event) {
    var answer = confirm("確定不保存么?");
    if (!answer) {
    event.preventDefault();
    }
    });

**補(bǔ)充:

A: 如何去掉上面兩個(gè)函數(shù)監(jiān)聽(tīng)呢?(比如用戶保存完之后)

1.再寫一個(gè)onbeforeunload事件,事件中什么都不放置,可以讓用戶保存之后觸發(fā)此事件;

2.將$locationChangeStart或者$stateChangeStart事件放在一個(gè)全局變量中,比如vm.stopListener,之后在用戶觸發(fā)的事件中調(diào)用一次vm.stopListener()即可。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,628評(píng)論 19 139
  • 22年12月更新:個(gè)人網(wǎng)站關(guān)停,如果仍舊對(duì)舊教程有興趣參考 Github 的markdown內(nèi)容[https://...
    tangyefei閱讀 35,421評(píng)論 22 257
  • github地址,歡迎大家提交更新。 express() express()用來(lái)創(chuàng)建一個(gè)Express的程序。ex...
    Programmer客棧閱讀 2,828評(píng)論 0 1
  • 通過(guò)AngularJS仿豆瓣一刻的案例:https://github.com/zhongxiaolian/doub...
    中小戀閱讀 1,888評(píng)論 1 21
  • 銷售的本質(zhì)就是把有價(jià)值的信息傳遞給有需求的人,從而幫助客戶解決問(wèn)題。所以,溝通是你要具備的基本素質(zhì),基本能力。這不...
    Lady_艾米閱讀 809評(píng)論 0 0

友情鏈接更多精彩內(nèi)容