我一直在努力解决这个问题。我试图导航到一个标签(让我们说Home
)到另一个标签(让我们说About
)。我能够导航将页面添加到导航堆栈中,但之后它不会更改活动选项卡。那,或者我们使用select
来设置活动标签,这意味着我丢失了导航堆栈。这是后一个选项代码:
export class HomePage implements OnInit {
tab: Tabs;
constructor(public navCtrl: NavController) {
this.tab = this.navCtrl.parent;
}
navigate() {
this.tab.select(1);
}
但这意味着如上所述,我丢失了导航堆栈,并且无法使用后退按钮,如果我使用push
则会显示该按钮。当我使用.push()
:
this.navCtrl.push(About)
虽然我们已成功导航到Home
标签,但有效标签仍无法更改,但仍会将About
显示为有效标签。
所以我希望的是同时拥有' Back'当我点击按钮从About
转到About
时,我们会选择按钮和有效标签(Home
)。这是一个带有push
选项的演示,因为您可以看到有效标签不会更改:https://plnkr.co/edit/6KIL8mxfTMCsvACpiD1K?p=preview
PS。我看了这个问题,但它对我没用:Changing tabs dynamically in Ionic 2
我正在使用Ionic 3
答案 0 :(得分:3)
我不认为这是标签组件的工作方式。使用选项卡式导航,您可以使用 n 导航堆栈(其中 n 是您拥有的不同选项卡的数量),这意味着您.push()
上的新页面nav-stack您将其推送到当前所选选项卡的堆栈上。
切换到另一个选项卡类型与以新根开头相同,您从初始页面([root]="yourFirstPage"
)开始,然后可以将新页面添加到此特定导航堆栈(您可以弹出它们使用后退按钮关闭导航堆栈。
在您的特定示例中,您正尝试在{em> Home 页面的堆栈上.push()
关于页面,并期望NavController知道您打算切换到另一个堆栈和以将新页面推送到新堆栈。
您的问题的一个解决方案可能是在您使用.select()
并在导航栏中手动显示后退按钮时始终记住上一个标签,该导航栏在点击时使用.select(previousTab)
。
我希望能让你更清楚。
答案 1 :(得分:2)
这是默认行为。选择选项卡时,它会清除导航堆栈并将根目录设置为另一个页面。当您在about
页面中推送home
页面时,您正在推送home
导航堆栈中的新页面,这就是为什么它不会更改并显示&#shoudn&# 39;改变。
使用制表符的原因是您可以按正确的类别细分和分割内容。在更新产品时,您不会让用户看到同一堆products
中的结算信息,因为它不属于该类别。
.select()
方法(您已在home.page.ts
中实施)是您可以选择标签而不点击特定标签的最近方法。
您可以做的只是从标签中移除about
并将其推入home
或删除按钮以从主页转到关于页面,因为已经有标签页对此。
在任何情况下,你想要做的是一个错误,离子团队消除了人们的可能性。
希望这会对你有所帮助。