angular - Ionic 2 - Odhlásiť kartu v bočnom menu


Ako môžem pridať kartu Odhlásiť sa do môjho bočného menu v Ionic 2? Ak ste prihlásený, nachádzate sa na stránke DashboardPage. Momentálne mám položku menu „Odhlásiť sa“, ktorá ma len presmeruje na HomePage. Tu je pole stránok v app.component.ts so všetkými položkami menu:

this.pages = [
    {title: 'Dashboard', component: DashboardPage},
    ...
    {title: 'Logout', component: HomePage}
];

Ale teraz potrebujem pridať logiku za odhlásením a nielen prepínať stránku. Je možné zavolať funkciu logout(), keď kliknem na kartu Odhlásiť sa, namiesto toho, aby som sa len presunul na Domovskú stránku?

UPRAVIŤ :

Tu je funkcia openPage:

openPage(page) {
    this.nav.setRoot(page.component);
}

Odpoveď č. 1

Môžete nastaviť komponent ako null v možnosti odhlásenia

this.pages = [
    {title: 'Dashboard', component: DashboardPage},
    ...
    {title: 'Logout', component: null}
];

A potom vo vašej metóde:

openPage(page) {
    if(page.component) {
        this.nav.setRoot(page.component);
    } else {
        // Since the component is null, this is the logout option
        // ...

        // logout logic
        // ...

        // redirect to home
        this.nav.setRoot(HomePage);
    }
}

Odpoveď č. 2

Viem, že na to už bolo odpovedané, ale niekto by to mohol považovať za užitočné.

    this.pages = [
        {title: 'Dashboard', component: DashboardPage},
        {title: 'Logout', component: HomePage},
        {title: 'Share', component: ''}
    ];

    openPage(page) {

        switch (true) {

          case ((page.title == 'Logout')): {
            console.log('Clicked Logout button');
            // this.logout(); // call logout logic method
          }
              break;

          case ((page.title == 'Share')): {
            console.log('Clicked Share button');
            // this.share(); call share logic method
          }
              break;

          default: {
            this.nav.setRoot(page.component);
          }
              break;
      }

    }