Я думаю, что вы запросили сложную операцию, поскольку это не стандартный способ выполнения действий.
Обычно кнопка не делает ничего, что заставляет пользователя понять, что он уже находится на этой вкладке.
Я настроил демонстрационный проект и попробовал различные встроенные события, но в конечном итоге tab-button
испускает событие click
, и он достигает уровня shouldChange
в компоненте tabs
перед тем, как его уволитьдля того, чтобы быть той же самой вкладкой:
https://github.com/ionic-team/ionic/blob/master/core/src/components/tabs/tabs.tsx#L164
Что делает добавлением события нажатия на кнопку вкладки в tabs.page.html
:
<ion-tabs>
<ion-tab-bar slot="bottom">
{{ snip }}
<ion-tab-button tab="tab2" (click)="tabButtonClicked('tab2')">
<ion-icon name="apps"></ion-icon>
<ion-label>Tab Two</ion-label>
</ion-tab-button>
{{ snip }}
</ion-tab-bar>
</ion-tabs>
Я думаю, чтоИспользуя этот обработчик кликов, вы берете текущую вкладку и отправляете свое собственное событие:
tabButtonClicked(tabNumber: string) {
if (tabNumber === this.selectTab) {
this.events.publish('tabs', tabNumber);
}
}
В этом руководстве показано, как использовать систему Ionic Events, которая позволяет передавать пользовательские события другим компонентам в системе:
https://alligator.io/ionic/events/
Таким образом, вы можете использовать это для генерации настраиваемого события «прокрутка вверх» и обработки его внутри вкладки. Затем используйте исходный код .scrollToTop()
внутри этого пользовательского обработчика событий.
Например, на вкладке, на которой вы хотите прокрутить, добавьте:
@ViewChild(IonContent, { static: false }) private content: IonContent;
constructor(public events: Events) {
}
ionViewWillEnter() {
this.events.subscribe('tabs', tabNumber => {
if (tabNumber === 'tab1') {
this.content.scrollToTop();
}
});
}
ionViewDidLeave() {
this.events.unsubscribe('tabs', () => {} );
}