J'ai généré une application avec le composant Ionic Tabs.
Les onglets sont Livraisons, À propos de et Contact.
Ensuite, j'ai généré une page Détails.
Je souhaite que la page Détails soit un enfant de l'onglet Deliveries.
Cela signifie que lorsque je suis sur une page details, je navigue dans l'onglet deliveries.
Quelqu'un a posé une question similaire sur Ionic Forum
La structure de répertoire générée:
- about
- contact
- deliveries
deliveries.module.ts
- details
details.module.ts
- tabs
tabs.module.ts
tabs.page.html
tabs.router.module.ts
app.module.ts
app-routing.module.ts
C'est le app-routing.module.ts généré
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
const routes: Routes = [
{ path: '', loadChildren: './tabs/tabs.module#TabsPageModule' },
];
@NgModule({
imports: [
RouterModule.forRoot(routes)
],
exports: [RouterModule]
})
export class AppRoutingModule {}
Ceci est le tabs.router.module.ts généré
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { TabsPage } from './tabs.page';
import { DeliveriesPage } from '../deliveries/deliveries.page';
import { AboutPage } from '../about/about.page';
import { ContactPage } from '../contact/contact.page';
const routes: Routes = [
{
path: 'tabs',
component: TabsPage,
children: [
{
path: '',
redirectTo: '/tabs/(deliveries:deliveries)',
pathMatch: 'full',
},
{
path: 'deliveries',
outlet: 'deliveries',
component: DeliveriesPage
},
{
path: 'about',
outlet: 'about',
component: AboutPage
},
{
path: 'contact',
outlet: 'contact',
component: ContactPage
}
]
},
{
path: '',
redirectTo: '/tabs/(deliveries:deliveries)',
pathMatch: 'full'
}
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
export class TabsPageRoutingModule {}
Ceci est un tabs.page.html généré
<ion-tabs>
<ion-tab label="Deliveries" icon="bicycle" href="/tabs/(deliveries:deliveries)">
<ion-router-outlet name="deliveries"></ion-router-outlet>
</ion-tab>
<ion-tab label="About" icon="information-circle" href="/tabs/(about:about)">
<ion-router-outlet name="about"></ion-router-outlet>
</ion-tab>
<ion-tab label="Contact" icon="contacts" href="/tabs/(contact:contact)">
<ion-router-outlet name="contact"></ion-router-outlet>
</ion-tab>
</ion-tabs>
Ceci est un fichier généré deliveries.module.ts
import { IonicModule } from '@ionic/angular';
import { RouterModule } from '@angular/router';
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { DeliveriesPage } from './deliveries.page';
@NgModule({
imports: [
IonicModule,
CommonModule,
FormsModule,
RouterModule.forChild([
{
path: '',
component: DeliveriesPage
}
])
],
declarations: [
DeliveriesPage
]
})
export class DeliveriesPageModule {}
C'est details.module.ts
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { Routes, RouterModule } from '@angular/router';
import { IonicModule } from '@ionic/angular';
import { DetailsPage } from './details.page';
const routes: Routes = [
{
path: '',
component: DetailsPage,
}
];
@NgModule({
imports: [
CommonModule,
FormsModule,
IonicModule,
RouterModule.forChild(routes)
],
declarations: [DetailsPage]
})
export class DetailsPageModule {}
Donc, toutes mes tentatives ont échoué, j'ai essayé de suivre la même logique que ci-dessus.
J'ai essayé de travailler dans deliveries.module.ts
RouterModule.forChild([
{
path: '',
component: DeliveriesPage,
},
{
path: 'details',
loadChildren: '../details/details.module#DetailsPageModule'
}
]),
J'ai aussi essayé
RouterModule.forChild([
{
path: '',
component: DeliveriesPage,
},
{
path: 'details',
outlet: 'deliveries
loadChildren: '../details/details.module#DetailsPageModule'
}
]),
Ou
RouterModule.forChild([
{
path: '',
component: DeliveriesPage,
children: [
{
path: 'details',
loadChildren: '../details/details.module#DetailsPageModule'
}
]
},
]),
Impossible de trouver un moyen d'accéder à la page de détails à partir de
Est-il possible d'y parvenir? C'est un peu déroutant.
Pour accéder facilement à la page details, le moyen le plus simple consiste maintenant à définir la route dans app-routing.module.ts, mais cela ne ferait pas partie du même routeur.
Avec 4.0.0-beta.18 ion-tab a été supprimé et il n'est pas nécessaire d'utiliser des sorties nommées.
Démo (avec deux approches différentes) + Explication:
https://github.com/servrox/demo-ionic-tab-routing
Version CLI ionique 4.10.3
Cadre ionique @ ionique/angulaire 4.0.1
C'est donc le moyen le plus propre que j'ai trouvé jusqu'à présent de le faire.
Ici le tabs.router.module.ts
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { TabsPage } from './tabs.page';
import { DeliveriesPage } from '../deliveries/deliveries.page';
import { AboutPage } from '../about/about.page';
import { ContactPage } from '../contact/contact.page';
import { DetailsPage } from '../details/details.page';
const routes: Routes = [
{
path: 'tabs',
component: TabsPage,
children: [
{
path: '',
redirectTo: '/tabs/(deliveries:deliveries)',
pathMatch: 'full',
},
{
path: 'deliveries',
outlet: 'deliveries',
component: DeliveriesPage,
},
{
path: 'details/:id',
outlet: 'deliveries',
component: DetailsPage
},
{
path: 'about',
outlet: 'about',
component: AboutPage
},
{
path: 'contact',
outlet: 'contact',
component: ContactPage
}
]
},
{
path: '',
redirectTo: '/tabs/(deliveries:deliveries)',
pathMatch: 'full'
}
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
export class TabsPageRoutingModule {}
Importez le DetailsModulePage dans tabs.module.ts
import { IonicModule } from '@ionic/angular';
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { TabsPageRoutingModule } from './tabs.router.module';
import { TabsPage } from './tabs.page';
import { ContactPageModule } from '../contact/contact.module';
import { AboutPageModule } from '../about/about.module';
import { DeliveriesPageModule } from '../deliveries/deliveries.module';
import { DetailsPageModule } from '../details/details.module';
@NgModule({
imports: [
IonicModule,
CommonModule,
FormsModule,
TabsPageRoutingModule,
DeliveriesPageModule,
AboutPageModule,
ContactPageModule,
DetailsPageModule
],
declarations: [TabsPage]
})
export class TabsPageModule {}
Ici le DetailsModulePage (assez basique)
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { Routes, RouterModule } from '@angular/router';
import { IonicModule } from '@ionic/angular';
import { DetailsPage } from './details.page';
const routes: Routes = [
{
path: '',
component: DetailsPage,
}
];
@NgModule({
imports: [
CommonModule,
FormsModule,
IonicModule,
RouterModule.forChild(routes)
],
declarations: [DetailsPage]
})
export class DetailsPageModule {}
Et c'est le moyen d'accéder à DetailsPage
Si vous avez un meilleur moyen de le faire, je serai heureux de le savoir.
C'est comme ça que j'ai fait. Dans tabs.router.module.ts ,
const routes: Routes = [
{
path: 'tabs',
component: TabsPage,
children: [
{
path: 'featured',
children: [
{
path: '',
loadChildren: '../tab-featured/tab-featured.module#TabFeaturedPageModule'
}
]
},
{
path: 'featured/:id',
children: [
{
path: '',
loadChildren: '../tab-featured-detail/tab-featured-detail.module#TabFeaturedDetailPageModule'
}
]
},
{
path: 'categories',
children: [
{
path: '',
loadChildren: '../tab-category/tab-category.module#TabCategoryPageModule'
}
]
},
{
path: 'popular',
children: [
{
path: '',
loadChildren: '../tab-popular/tab-popular.module#TabPopularPageModule'
}
]
},
{
path: '',
redirectTo: '/tabs/featured',
pathMatch: 'full'
}
]
},
{
path: '',
redirectTo: '/tabs/featured',
pathMatch: 'full'
}
];
tab-featuring-detail.module.ts
import { IonicModule } from '@ionic/angular';
import { RouterModule } from '@angular/router';
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { TabFeaturedDetailPage } from './tab-featured-detail.page';
@NgModule({
imports: [
IonicModule,
CommonModule,
FormsModule,
RouterModule.forChild([{ path: '', component: TabFeaturedDetailPage }])
],
declarations: [TabFeaturedDetailPage]
})
export class TabFeaturedDetailPageModule {}