angular.js - 單頁(yè)應(yīng)用(ng/vue)該如何監(jiān)聽(tīng)用戶離開(kāi)當(dāng)前頁(yè)面(或者路由)?
問(wèn)題描述
場(chǎng)景描述:在ng的某個(gè)路由中,需要在用戶離開(kāi)當(dāng)前路由時(shí)提示用戶是否確認(rèn)離開(kāi)
我的疑惑:如果是普通的應(yīng)用,我們可以使用js來(lái)判斷用戶是否要離開(kāi),但是在單頁(yè)應(yīng)用中,所有的跳轉(zhuǎn)離開(kāi)其實(shí)都是在一個(gè)頁(yè)面中,我想判斷用戶是否離開(kāi)當(dāng)前路由,但是沒(méi)找到ng提供的公戶離開(kāi)路由的方法
求各位前輩的思路~
問(wèn)題解答
回答1:我只知道Vue可以
route: { deactivate() {... }}回答2:
ui-router里面有一個(gè)事件可以監(jiān)控狀態(tài)的改變,回調(diào)函數(shù)中參數(shù)可以記錄當(dāng)前頁(yè)面$rootScope.$on(’$stateChangeStart’, function (event, toState, fromState){});
回答3:ng中如果使用ui-router來(lái)作為路由系統(tǒng)。可以使用ui-router的事件系統(tǒng)來(lái)對(duì)路由狀態(tài)的變化做出相應(yīng)的業(yè)務(wù)邏輯。
$rootScope.$on(’$stateChangeStart’,function(event, toState, toParams, fromState, fromParams){ event.preventDefault(); // transitionTo() promise will be rejected with // a ’transition prevented’ error})
詳情可以參考ui-router中的$state
回答4:js原生通過(guò)hashchange事件,來(lái)監(jiān)聽(tīng)頁(yè)面hash是否變化,在單頁(yè)面應(yīng)用中,很多的框架都會(huì)封裝這個(gè)方法成鉤子函數(shù)。
相關(guān)文章:
1. objective-c - 做一個(gè)百度地圖定位的demo,結(jié)果出錯(cuò)好多。2. 微信小程序session無(wú)法緩存的問(wèn)題3. angular.js - 公眾號(hào)H5頁(yè)面 angularjs 怎么動(dòng)態(tài)修改title值(微信6.5.5,動(dòng)態(tài)修改不行 6.5.7闊以)4. html - 一道簡(jiǎn)單CSS的面試題5. css - 微信瀏覽器打開(kāi)字體比Safari打開(kāi)的小6. javascript - vue單頁(yè)應(yīng)用阻止瀏覽器后退?7. javascript - 關(guān)于前后分離頁(yè)面登錄攔截問(wèn)題8. javascript - 如下,請(qǐng)問(wèn)這是什么錯(cuò)誤?9. javascript - webpack “Couldn’t find preset "latest" relative to directory”10. html - css 使用 邊框 border 的時(shí)候,怎么讓他作為內(nèi)邊框。
