angular - Ako môžem zmierniť kliknutie na kartu?
Mám skupinu kariet:
<ion-tabs>
<ion-tab [root]="tab1Root" tabTitle="Programmes" tabIcon="icon-programmes"></ion-tab>
<ion-tab [root]="tab2Root" (ionSelect)="studioCheck()" tabTitle="Studio" tabIcon="icon-studio"></ion-tab>
<ion-tab [root]="tab3Root" tabTitle="Library" tabIcon="icon-library"></ion-tab>
<ion-tab [root]="tab4Root" tabTitle="Profile" tabIcon="icon-profile"></ion-tab>
</ion-tabs>
Keď používateľ klikne na druhú kartu ('Studio'), potrebujem skontrolovať, či k nej už má prístup. Ak áno, skvelé, ak nie, chcem zobraziť toast notifikáciu a načítať prvú kartu.
Ako to môžem urobiť?
Myslel som si, že return false by stačilo pri studioCheck(), ale nestačí.
Typescript :
studioCheck() {
console.log('Studio visited');
// Grab studio selected level
this.storage.get('studio_level').then((val) => {
console.log('Storage queried');
if(val) {
console.log('Level ID: ', val);
return true;
} else {
// No level selected
let toast = this.toastCtrl.create({
message: 'Please choose a programme in order to use the Studio',
duration: 3000,
position: 'top'
});
toast.present();
this.navCtrl.parent.select(0);
return false;
}
});
}
Myslel som si, že možno ionSelect nečaká na asynchrónne volanie storage.get, tak som jednoducho dal return false; na začiatok funkcie, ale to robí to isté.
Má niekto nejaké nápady?
Odpoveď č. 1
nastaviť zobrazenie takto
<ion-tabs #tabs>
<ion-tab [root]="tab1Root" tabTitle="Programmes" tabIcon="icon-programmes"></ion-tab>
<ion-tab [root]="tab2Root" (ionSelect)="studioCheck()" tabTitle="Studio" tabIcon="icon-studio"></ion-tab>
<ion-tab [root]="tab3Root" tabTitle="Library" tabIcon="icon-library"></ion-tab>
<ion-tab [root]="tab4Root" tabTitle="Profile" tabIcon="icon-profile"></ion-tab>
</ion-tabs>
a potom v kontroléri:
export class MyPage {
@ViewChild("tabs") public tabs: Tabs;
...
studioCheck() {
console.log('Studio visited');
// Grab studio selected level
this.storage.get('studio_level').then((val) => {
console.log('Storage queried');
if(val) {
console.log('Level ID: ', val);
return true;
} else {
// No level selected
let toast = this.toastCtrl.create({
message: 'Please choose a programme in order to use the Studio',
duration: 3000,
position: 'top'
});
toast.present();
this.tabs.select(0);
}
});
}
}
Vysvetlenie
- Aby ste mohli prepínať karty v kóde, musíte získať inštanciu
Tabsa zavolať na nejselect. - Majte na pamäti, že
ionSelectsa vysiela, keď je karta vybraná, takže návratová hodnota sa ignoruje. - kvôli
this.storage.get, váš kód je asynchrónny, takžereturn false;nemôže metódustudioCheckopustiť tak či tak
