#### 1. 問題描述 --- 當(dāng)前有三個頁面: 個人中心(pages/user/index)、個人信息(pages/user/info)、修改姓名(pages/user/name) 正確邏輯: 修改姓名的操作步驟是在個人中心點擊 **設(shè)置** 的圖標,進入個人信息頁面,在個人信息頁面點擊姓名進入修改姓名的頁面,點擊保存或左上角的返回鍵回到個人信息頁面,并且顯示最新的姓名。三個頁面及操作步驟如下所示: ![](https://img.itqaq.com/art/content/60da83c51407916cc8185355668fde4f.png) ``` 個人中心 -> 個人信息 -> 修改姓名 ``` uniapp 的路由跳轉(zhuǎn) API : + uni.navigateTo() 保留當(dāng)前頁,跳轉(zhuǎn)到非 tabBar 頁 + uni.redirectTo() 關(guān)閉當(dāng)前頁,跳轉(zhuǎn)到非 tabBar 頁 + uni.reLaunch() 關(guān)閉所有頁面,打開到應(yīng)用內(nèi)的某個頁面 + uni.navigateBack() 關(guān)閉當(dāng)前頁,返回上一頁面或多級頁面 更多路由跳轉(zhuǎn) API 查看官方文檔: [https://uniapp.dcloud.net.cn/api/router.html](https://uniapp.dcloud.net.cn/api/router.html) 起初因為 uniapp 的路由跳轉(zhuǎn) API 有好多種,對他們不太熟悉,不知道使用哪個好,后面導(dǎo)致頁面跳轉(zhuǎn)存在問題 方案 1: 起初我只考慮修改了姓名的情況,未考慮進入修改姓名頁面但并沒有修改姓名,然后通過返回鍵返回個人信息頁。這種跳轉(zhuǎn)方式用法在修改姓名的情況下是沒有問題的,但如果沒有修改姓名,點擊了修改姓名頁的返回鍵將直接回到個人中心頁,而不是個人信息頁,因為個人信息頁到修改姓名頁時使用的 uni.redirectTo() ``` 個人中心 -> 個人信息: uni.navigateTo() 個人信息 -> 修改姓名: uni.redirectTo() 修改姓名 -> 個人信息: uni.redirectTo() ``` 方案 2: 進入修改姓名頁,點擊返回鍵回到個人信息頁,那么個人信息頁跳轉(zhuǎn)到修改姓名頁必須使用 uni.navigateTo() : ``` 個人中心 -> 個人信息: uni.navigateTo() 個人信息 -> 修改姓名: uni.navigateTo() ``` 要想滿足我們的功能需求,只需在方案 2 的基礎(chǔ)上兼容修改姓名時頁面操作流程也正確就可以了,通過查找資料和請教同事得知可以返回上一級頁面并調(diào)用上一級頁面中的方法,這種寫法正好解決了我的問題 ```javascript // 當(dāng)前頁面棧的實例 let pages = getCurrentPages() // 上一個頁面實例對象 let beforePage = pages[pages.length - 2] // 觸發(fā)上一個頁面中的 getUserInfo 方法 beforePage.$vm.getUserInfo() // 返回上一個頁面 uni.navigateBack() ``` #### 2. 解決方案 --- 三個頁面之間的跳轉(zhuǎn)方式 ``` 個人中心 -> 個人信息: uni.navigateTo() 個人信息 -> 修改姓名: uni.navigateTo() 修改姓名 -> 個人信息: uni.navigateBack() ``` 當(dāng)姓名修改成功后彈出消息提示,然后調(diào)用個人信息頁的 getUserInfo 方法重新獲取姓名,最后返回到個人信息頁即可 ```javascript uni.showToast({ title: '修改成功', duration: 1500 }) setTimeout(() => { // 當(dāng)前頁面棧的實例 let pages = getCurrentPages() // 上一個頁面實例對象 let beforePage = pages[pages.length - 2] // 觸發(fā)上一個頁面中的 getUserInfo 方法 beforePage.$vm.getUserInfo() // 返回上一個頁面 uni.navigateBack() }, 1500); ```