Vous pouvez utiliser des routes enfant pour utiliser différentes mises en page pour différentes vues.
Voici un exemple courant d'utilisation des routes enfant dans Angular2
J'aime utiliser les routes enfant pour séparer les pages sécurisées et les pages non sécurisées dans mes applications angulaires 2.
Dans la racine de mon application, j'ai deux répertoires
/Public
&
/Secure
Maintenant, dans le répertoire racine, j'ai aussi
/app.routing.ts
à partir de là, je crée un dossier de mises en page,
/layouts
Dans ce répertoire, je crée
/layouts/secure.component.ts
/layouts/secure.component.html
&
/layouts/public.component.ts
/layouts/public.component.html
à partir de là, je peux dévier mes routes vers l'une des deux mises en page, selon que la page est destinée à être sécurisée ou publique. Pour ce faire, je crée une route pour chaque disposition dans mon fichier Root routes.ts.
/app.routes.ts
const APP_ROUTES: Routes = [
{ path: '', redirectTo: '/home', pathMatch: 'full', },
{ path: '', component: PublicComponent, data: { title: 'Public Views' }, children: PUBLIC_ROUTES },
{ path: '', component: SecureComponent, canActivate: [Guard], data: { title: 'Secure Views' }, children: SECURE_ROUTES }
];
Remarquez que j'enregistre mes routes enfant pour chaque disposition. C'est la valeur exportée de chaque fichier de route séparé. L'un est dans le répertoire public et l'autre dans le répertoire sécurisé.
/public/public.routes.ts
export const PUBLIC_ROUTES: Routes = [
{ path: '', redirectTo: 'home', pathMatch: 'full' },
{ path: 'p404', component: p404Component },
{ path: 'e500', component: e500Component },
{ path: 'login', component: LoginComponent },
{ path: 'register', component: RegisterComponent },
{ path: 'home', component: HomeComponent },
{ path: 'benefits', component: BenefitsComponent },
{ path: 'services', component: ServicesComponent },
{ path: 'education', component: EducationComponent },
{ path: 'products', component: ProductsComponent },
{ path: 'fcra', component: FcraComponent },
{ path: 'croa', component: CroaComponent },
{ path: 'building', component: BuildingComponent },
{ path: 'tips', component: TipsComponent },
{ path: 'maintenance', component: MaintenanceComponent }
];
Tous ces itinéraires sont maintenant accessibles en tant qu'itinéraires enfants pour mon aménagement public. Ce qui nous amène maintenant à protéger nos vues sécurisées.
Donc, dans le répertoire sécurisé, je fais essentiellement la même chose,
/secure/secure.routes.ts
export const SECURE_ROUTES: Routes = [
{ path: '', redirectTo: 'overview', pathMatch: 'full' },
{ path: 'items', component: ItemsComponent },
{ path: 'overview', component: OverviewComponent },
{ path: 'profile', component: ProfileComponent },
{ path: 'reports', component: ReportsComponent },
{ path: 'recommendations', component: RecommendationsComponent },
{ path: 'score-simulator', component: ScoreSimulatorComponent },
{ path: 'payment-method', component: PaymentMethodComponent },
{ path: 'lock-account', component: LockAccountComponent }
];
Cela me permet d'utiliser auth
pour protéger ces routes d'enfants maintenant. Si vous vous rappelez dans
/app.routes.ts nous avons fait cela pour les routes sécurisées,
{ path: '', component: SecureComponent, canActivate: [Guard], data: { title: 'Secure Views' }, children: SECURE_ROUTES }
Remarquez le [Guard]
. Cela nous permet de protéger toutes les routes enfant pour la mise en page sécurisée. C'est l'une des raisons pour lesquelles j'utilise des routes enfant. Je pourrais vous en dire beaucoup plus mais je pense que c'est l'explication la plus raisonnable.
Pour aller un peu plus loin et mettre les choses en perspective pour vous, voici comment je [Guard]
les pages sécurisées. Créer un service et implementing CanActivate
@Injectable()
export class Guard implements CanActivate {
constructor(protected router: Router, protected auth: Auth ) {}
canActivate() {
if (localStorage.getItem('access_token')) {
// logged in so return true
return true;
}
// not logged in so redirect to login page
this.router.navigate(['/home']);
return false;
}
}
Cela vous permet de servir la mise en page publique avec <router-outlet></router-outlet>
puis utiliser un en-tête et un pied de page différents dans la mise en page. Utilisez ensuite <router-outlet></router-outlet>
dans la mise en page sécurisée à nouveau et évidemment un en-tête et un pied de page différents. Faites-moi savoir si j'ai laissé quelque chose d'obscur et je mettrai à jour la réponse.
0 votes
Il devrait être dans la même disposition jusqu'à ce que vous implémentiez quelque chose de similaire à la disposition des cartes.