一、第一步
1、App.vue中定義globalData用于全局存儲狀態
globalData:{needShowReleaseConfirm: false, // 標記是否需要顯示發布頁面確認彈窗allowReleaseJump: false ,// 標記是否允許跳轉到發布頁面},
2、在App.vue中的onLaunch寫入監聽事件
onLaunch: function() {// 添加switchTab攔截器const app = this;uni.addInterceptor('switchTab', {invoke: (args) => {console.log('switchTab攔截器觸發', args);// 獲取當前頁面路徑const pages = getCurrentPages();if (pages.length > 0) {const currentPage = pages[pages.length - 1];const currentRoute = currentPage.route;// 判斷是否跳轉到release頁面(從任何tabbar頁面)if (args.url === '/pages/release/release') {// 如果已經允許跳轉,則清除標記并正常跳轉if (app.globalData.allowReleaseJump) {console.log('用戶已確認,允許跳轉到release頁面');app.globalData.allowReleaseJump = false;app.globalData.needShowReleaseConfirm = false;return true;}console.log('檢測到跳轉到release,需要顯示確認彈窗');// 設置全局標記,需要顯示確認彈窗app.globalData.needShowReleaseConfirm = true;// 觸發當前頁面顯示彈窗uni.$emit('showReleaseConfirm');// 阻止跳轉return false;}}// 其他情況正常跳轉app.globalData.needShowReleaseConfirm = false;app.globalData.allowReleaseJump = false;return true;}});},
二、第二步
我的需求是從任何tabbar頁面跳轉到release這個tabbar頁面時都彈窗出來,點擊選擇后才會跳轉,如圖
這些彈窗需要寫到跳轉前的頁面里,比如從index頁面跳轉到release頁面前要彈窗,就把這個彈窗寫到index頁面。
1、拿index頁面來實例,在index.vue頁面的created中監聽收到的狀態,來決定是否顯示彈窗。
created() {// 監聽全局事件,當要跳轉到發布頁面時顯示確認彈窗uni.$on('showReleaseConfirm', () => {console.log('收到顯示發布確認彈窗事件');this.showReleaseModal = true;});},