在HarmonyOS NEXT开发中router.replaceUrl问题?

在HarmonyOS NEXT开发中A页面pushUrl,router.RouterMode.Single到B页面,B页面登录成功后,repaceUrl,router.RouterMode.Single到A页面,A页面点击返回按钮,调用router.back,无反应,点击系统返回键直接回到桌面,怎么解决?

阅读 535
1 个回答

由于前一个页面使用router.replaceUrl()跳转,可以修改为router.pushUrl(),因为replaceUrl是替换当前页面,并销毁被替换的页面;具体内容请看:https://developer.huawei.com/consumer/cn/doc/harmonyos-refere...
参考demo:

//searchDetail.ets 
import { router } from '@kit.ArkUI' 
 
@Entry 
@Component 
struct searchDeatil{ 
  onPageHide(): void { 
    //清空页面栈中的所有历史页面,仅保留当前页面作为栈顶页面。 
    router.clear() 
 
 
  } 
  @State message:string='返回' 
 
  build() { 
    Row(){ 
      Column(){ 
        Text('B页面') 
        Button(this.message).fontSize(20).onClick(()=>{ 
          router.replaceUrl({ 
            url:'pages/Index' 
          },router.RouterMode.Single, (err) => { 
            if (err) { 
              console.error(`Invoke replaceUrl failed, code is ${err.code}, message is ${err.message}`); 
              return; 
            } 
            console.info('Invoke replaceUrl succeeded.'); 
          }) 
        }) 
 
      } 
    } 
 
  } 
} 
 
//index.ets 
import router from '@ohos.router'; 
@Entry 
@Component 
struct Index{ 
 
 
  build() { 
    Row(){ 
      Column(){ 
        Text('A页面') 
        Button('跳转B').onClick(()=>{ 
          router.pushUrl({ 
            url: 'pages/SearchDetail' // 目标url 
          }, router.RouterMode.Single, (err) => { 
            if (err) { 
              console.error(`Invoke replaceUrl failed, code is ${err.code}, message is ${err.message}`); 
              return; 
            } 
            console.info('Invoke replaceUrl succeeded.'); 
          }) 
        }) 
        Button('返回').onClick(()=>{ 
          router.back() 
        }) 
      } 
    } 
  } 
 
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题