HarmonyOS鸿蒙Next中【快应用】为什么调用router.clear()后,立即调用router.getLength()发现页面并未销毁

HarmonyOS鸿蒙Next中【快应用】为什么调用router.clear()后,立即调用router.getLength()发现页面并未销毁

现象描述

调用router.clear()后,立即调用router.getLength()发现页面并未销毁。

实现方式

调用router.clear()后,页面销毁需要一定的时间,建议使用setTimeout延迟1s后再调用router.getLength(),这样就可以获取最新的页面栈数量。

代码如下:

<script>  
import router from '@system.router';  
export default {    
data: {      
photoUri: '/Common/logo.png',      
taskflag: '',      
___PARAM_LAUNCH_FLAG___: '',      
length: '',      
pages: {},      
pageFrom: ''    
},    
onInit() {      
this.$page.setTitleBar({ text: 'deepLink' })      
var that = this;      
that.taskflag = this.___PARAM_LAUNCH_FLAG___;      
// 调用getPages方法      
let pages = router.getPages()      
// 由于获得的值是一个JSON数组,所以直接打印是打印不出来的,可以使用下面的方法来打印      
console.log("tag", this.printJSONArray(router.getPages()));      
that.pages = this.printJSONArray(router.getPages());      
that.length = router.getLength();      
console.log("pages' length = " + that.length);    
},    
printJSONArray(array) {      
let result = ""      
const suffix = ", "      
Array.isArray(array) && array.forEach((element, index) => {        
result = result + JSON.stringify(element) + (index === array.length - 1 ? "" : ", ")      
})      
return result    
},    
clear: function () {      
router.clear()      
setTimeout(() => {        
var that = this;        
// 调用getPages方法        
let pages = router.getPages()        
// 由于获得的值是一个JSON数组,所以直接打印是打印不出来的,可以使用下面的方法来打印        
console.log("tag", this.printJSONArray(router.getPages()));        
that.pages = this.printJSONArray(router.getPages());        
that.length = router.getLength();        
console.log("pages' length = " + that.length);      
}, 1000);    
}  
</script>

更多关于HarmonyOS鸿蒙Next中【快应用】为什么调用router.clear()后,立即调用router.getLength()发现页面并未销毁的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于HarmonyOS鸿蒙Next中【快应用】为什么调用router.clear()后,立即调用router.getLength()发现页面并未销毁的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,router.clear()用于清除当前页面栈中的所有页面,但该操作是异步的。调用router.clear()后,页面栈的清理操作可能尚未完成,因此立即调用router.getLength()可能返回未更新的页面栈长度。建议在router.clear()后使用回调或延迟执行router.getLength(),以确保获取到正确的页面栈长度。

回到顶部