1、掛載完成后,判斷瀏覽器是否支持popstate
讓客戶(hù)滿(mǎn)意是我們工作的目標(biāo),不斷超越客戶(hù)的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶(hù),將通過(guò)不懈努力成為客戶(hù)在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名注冊(cè)、網(wǎng)頁(yè)空間、營(yíng)銷(xiāo)軟件、網(wǎng)站建設(shè)、平果網(wǎng)站維護(hù)、網(wǎng)站推廣。
mounted(){
if (window.history window.history.pushState) {
history.pushState(null, null, document.URL);
window.addEventListener('popstate', this.fun, false);//false阻止默認(rèn)事件
}
},
2、頁(yè)面銷(xiāo)毀時(shí),取消監(jiān)聽(tīng)。否則其他vue路由頁(yè)面也會(huì)被監(jiān)聽(tīng) (destroyed鉤子在使用 keep-alive就不會(huì)執(zhí)行) 在開(kāi)發(fā)過(guò)程中遇到一個(gè)問(wèn)題,每次返回只在第一次有效,后面就沒(méi)有效果了,于是在每次打開(kāi)彈框的時(shí)候動(dòng)態(tài)綁定事件,在返回時(shí)解除綁定,問(wèn)題就解決了。
destroyed(){
window.removeEventListener('popstate', this.fun, false);//false阻止默認(rèn)事件
},
3、將監(jiān)聽(tīng)操作寫(xiě)在methods里面,removeEventListener取消監(jiān)聽(tīng)內(nèi)容必須跟開(kāi)啟監(jiān)聽(tīng)保持一致,所以函數(shù)拿到methods里面寫(xiě)
methods:{
fun(){
console.log("監(jiān)聽(tīng)到了");
}
}
在一次項(xiàng)目,有個(gè)需求涉及到切后臺(tái)回到app時(shí),需要調(diào)起一個(gè)彈窗,以這個(gè)需求為例子,跟大家分享下我如何實(shí)現(xiàn)的(大牛輕拍 = = )
首先,我們?cè)赼pp初始化時(shí),要注冊(cè)activity生命周期的回調(diào),我這邊項(xiàng)目里在BaseApplication初始化時(shí)調(diào)用registerActivityLifecycleCallbacks()
它需要一個(gè)ActivityLifecycleCallbacks類(lèi)型的參數(shù)
這個(gè)接口涉及到所有activity生命周期的回調(diào)
回歸正題,先初始化ActivityLifecycleCallbacks,
我們現(xiàn)在要做的是后臺(tái)回前臺(tái),所以我們只選擇onActivityStarted和onActivityPaused
我是這么做判斷的,給個(gè)foregroundActivityCount去表示當(dāng)前app有多少個(gè)activity處于啟動(dòng)的狀態(tài),給個(gè)Boolean值appInBackground判斷app是否處于后臺(tái),每次打開(kāi)app,當(dāng)啟動(dòng)一個(gè)activity時(shí),就統(tǒng)計(jì)開(kāi)啟activity的次數(shù),并且調(diào)用你所需要的監(jiān)聽(tīng)方法;只要在start 和 stop時(shí)判斷有所activity都stop了,當(dāng)當(dāng)前activity啟動(dòng)次數(shù)為0時(shí),說(shuō)明app處于后臺(tái);
初始化已經(jīng)完成,接下來(lái)就是怎么調(diào)用了。我們?nèi)サ胶笈_(tái)回來(lái)時(shí)需要操作的activity或者fragment,在初始化時(shí)調(diào)取BaseApplication里面剛才設(shè)定的方法
在里面寫(xiě)下你后臺(tái)回來(lái)時(shí)你需要的操作
還有一個(gè)缺陷,假如是在指定fragment做監(jiān)聽(tīng)怎么辦?其實(shí)都差不多的,fragment在activity里,綁定 了activity的生命周期,假設(shè)我們要在指定的fragment才調(diào)取這個(gè)方法,我們需要在加一層判斷,判斷當(dāng)前fragment是否可見(jiàn)
這樣,只要你每次從后臺(tái)回來(lái),都可以監(jiān)聽(tīng)到,但如果不在當(dāng)前fragment的話(huà),就不會(huì)調(diào)用你設(shè)定的方法。
以上,是我剛接觸不久的問(wèn)題,分享給大家,寫(xiě)的不好的大家見(jiàn)諒,有問(wèn)題可以評(píng)論或私信我,本人還是實(shí)習(xí)生,請(qǐng)輕拍= =
1.mounted中注冊(cè)監(jiān)聽(tīng)方法:
//監(jiān)聽(tīng)返回鍵
if (window.history window.history.pushState) {
history.pushState(null, null, document.URL);
window.addEventListener('popstate', this.backButton, false);//false阻止默認(rèn)事件
}
2.methods中寫(xiě)方法的實(shí)現(xiàn):
backButton () {//點(diǎn)擊返回鍵時(shí)實(shí)現(xiàn)的業(yè)務(wù)邏輯
},
3.在destroyed中寫(xiě):(退出頁(yè)面時(shí)銷(xiāo)毀監(jiān)聽(tīng)事件,防止其他頁(yè)面使用)
destroyed () {
window.removeEventListener('popstate',this.backButton,false);//false阻止默認(rèn)事件
},