代码:
@Entry
@Component
struct Index {
@Provide('NavPathStack') pageInfos: NavPathStack = new NavPathStack();
@Builder
PagesMap(name: string) {
if (name == 'pageOneTmp') {
pageOneTmp()
} else if (name == 'pageTowTmp') {
pageTowTmp()
}
}
build() {
Navigation(this.pageInfos) {
Button('Push pageOneTmp')
.margin(20)
.width('80%')
.onClick(() => {
this.pageInfos.pushPathByName('pageOneTmp', '');
});
Button('Push pageTowTmp')
.margin(20)
.width('80%')
.onClick(()=>{
this.pageInfos.pushPathByName('pageTowTmp', '')
})
}
.title('Main')
.navDestination(this.PagesMap)
}
}
@Component
export struct pageOneTmp {
@Consume('NavPathStack') pageInfos: NavPathStack;
build() {
NavDestination() {
Column() {
Text('NavDestinationContent1')
Button('Push pageTowTmp')
.margin(20)
.width('80%')
.onClick(() => {
this.pageInfos.pushPathByName('pageTowTmp', '');
})
}
.width('100%')
.height('100%')
}
.title("pageOneTmp")
.onBackPressed(()=>{
const popDestionationInfo = this.pageInfos.pop()
return true
})
}
}
@Component
export struct pageTowTmp {
@Consume('NavPathStack') pageInfos: NavPathStack;
build() {
NavDestination() {
Column() {
Text('NavDestinationContent2')
Button('Push pageOneTmp')
.margin(20)
.width('80%')
.onClick(() => {
this.pageInfos.pushPathByName('pageOneTmp', '');
})
Button('clear')
.margin(20)
.width('80%')
.onClick(()=>{
this.pageInfos.clear(true)
})
}
.width('100%')
.height('100%')
}.title("pageTowTmp")
.onBackPressed(()=>{
const popDestionationInfo = this.pageInfos.pop()
return true
})
}
}
分析:
根据提供的代码和操作序列,我们来重新审视页面的路由栈变化情况:
- 从Main页面点击'Push pageOneTmp'按钮:
pageInfos.pushPathByName('pageOneTmp', '');
路由栈大小变为2(Main -> pageOneTmp)。 - 在pageOneTmp中点击'Push pageTowTmp'按钮:
pageInfos.pushPathByName('pageTowTmp', '');
路由栈大小变为3(Main -> pageOneTmp -> pageTowTmp)。 - 在pageTowTmp中点击'Push pageOneTmp'按钮:
pageInfos.pushPathByName('pageOneTmp', '');
路由栈大小变为4(Main -> pageOneTmp -> pageTowTmp -> pageOneTmp)。 - 在pageOneTmp中再次点击'Push pageTowTmp'按钮:
pageInfos.pushPathByName('pageTowTmp', '');
路由栈大小变为5(Main -> pageOneTmp -> pageTowTmp -> pageOneTmp -> pageTowTmp)。 - 在pageTowTmp中点击'clear'按钮:
pageInfos.clear(true); 根据clear(true)方法的调用,它会清除导航栈中的所有条目,但保留根页面(即Main)。因此,最终的路由栈大小应为1(仅剩Main)。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。