ionic-framework - IONIC 4 - 以编程方式路由时选项卡图标保持选中状态
问题描述
使用 Ionic 4 和标签。假设我们有 Tab1 / Tab2 / Tab3 以及由 Ionic 生成的默认应用程序。如果我在 Tab1 中,我想使用硬件后退按钮退出应用程序,但如果我在另一个选项卡中,我需要返回 Tab1。
目前我的代码有效,但是:例如,如果我在 Tab2 中,那么我使用硬件后退按钮,然后路由有效,我被重定向到 Tab1,但 Tab2 图标仍然处于选中状态。(Tab1 图标也被选中,但这是正常的,因为我已被路由到此选项卡)
tabs.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 navcontroller 中,很好地路由到 /tabs(这意味着,在路由规则中,转到 tab1。)当然,在这两种情况下,订阅都是在 ionViewDidLeave 生命周期挂钩中取消订阅。
但是无论如何,当使用硬件后退按钮导航到 tab1 时,如何取消选择 tab2 图标?这就像如果通知选项卡栏已选择选项卡1(因为自动选择了选项卡1图标),但没有通知选项卡栏取消选择选项卡2图标。这意味着我在标签栏中选择了两个图标。
谢谢
解决方案
在跟踪实际设备上发生的情况后,似乎某些手机(例如在三星 S20+、10+ 上观察到,而不是在摩托罗拉 G9 上观察到):hover
在您点击时将元素状态设置为选项卡按钮。使用操作系统后退导航不会与应用程序 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)
.
至于为什么手机在没有鼠标的情况下可能会有悬停效果,这个问题仍然悬而未决。
推荐阅读
- r - 找出向量中数字的所有组合。R 编程
- java - 从字符串转换为时间戳并返回
- python - 发出停止长时间运行的 Huey 任务的信号
- python - 比较多个列以获取两个熊猫数据框中不同的行
- eclipse - 面向(嵌入式 C/C++)开发人员的 Eclipse IDE 2020-12:经典深色主题深黑色背景和菜单中的文本
- html - 使用小窗口浏览器拉伸背景
- ios - 在 Timer.scheduledTimer 中更新多个 UI 元素不起作用
- algorithm - 两个数字和问题的真实时间复杂度是多少?
- javascript - 页面中的 HTML 按钮
- javascript - 将值从 index.php 发送到顶点图表 .js 文件