IONIC 4 - 以编程方式路由时,选项卡图标保持选中状态



使用 Ionic 4 和制表符。 假设我们有 Tab1/Tab2/Tab3 和 Ionic 生成的默认应用程序。 我想使用硬件后退按钮,如果我在 Tab1 中退出应用程序,但如果我在另一个选项卡中,我需要返回 Tab1。

目前我的代码可以工作,但是: 例如,如果我在 Tab2 中,那么我使用硬件后退按钮,然后路由工作,我被重定向到 Tab1,但 Tab2 图标保持选中状态。(Tab1图标也被选中,但这是正常的,因为我已被路由到此选项卡(

选项卡.html :

<ion-tab-bar slot="bottom">
<ion-tab-button tab="tab1">
<ion-icon name="flash"></ion-icon>
<ion-label>Tab One</ion-label>
</ion-tab-button>
<ion-tab-button tab="tab2">
<ion-icon name="apps"></ion-icon>
<ion-label>Tab Two</ion-label>
</ion-tab-button>
<ion-tab-button tab="tab3">
<ion-icon name="send"></ion-icon>
<ion-label>Tab Three</ion-label>
</ion-tab-button>
</ion-tab-bar>

Tab1.ts :

ionViewWillEnter() {
this.subscription = this.platform.backButton.subscribe(() => {
navigator['app'].exitApp();
});
}

Tab2.ts :

ionViewWillEnter() {
this.subscription = this.platform.backButton.subscribe(() => {
this.navCtrl.navigateRoot('/tabs');
});
}

在 Tab2.ts 中,导航控制器很好地路由到/tabs(这意味着,在路由规则中,转到 tab1。 当然,在这两种情况下,订阅都是在ionViewDidLeave生命周期钩子中取消订阅的。

但无论如何,当使用硬件后退按钮导航到tab1时,如何取消选择tab2图标? 这就像通知选项卡栏已选择 tab1(因为自动选择了 Tab1 图标(,但选项卡栏未收到取消选择 Tab2 图标的通知。这意味着我在标签栏中选择了两个图标。

谢谢

在跟踪实际设备上发生的情况后,似乎某些手机(例如在三星S20 +,10 +上观察到,而不是在摩托罗拉G9上观察到(在点击时将:hover元素状态设置为选项卡按钮。使用 OS 后退导航不会与应用 UI 交互,并使选项卡处于悬停状态。

Ionic定义了这个CSS,导致选项卡在悬停时显示为活动状态,如果你实际上用鼠标悬停它,这很好:

@media (any-hover: hover) a:hover {
color: var(--color-selected);
}

要解决这个问题,请将其添加到您的 CSS 中:

ion-tab-button:not(.tab-selected)::part(native):hover {
color: var(--color);
}

说明:我们定位的是选项卡按钮内的<a part="native">标记,这些按钮未选中但悬停在鼠标上,并将其颜色恢复为当前文本颜色。

如果要在桌面上保留悬停效果,可以将上述规则与:not(.plt-desktop)结合使用。

至于为什么手机在没有鼠标的情况下可能会有悬停效果,这个问题仍然悬而未决。

在 Ionic 5 中,以下内容对我有用:

ion-tab-button:not(.tab-selected) {
--color-selected: var(--color);
}

最新更新