J'ai besoin d'aide pour l'acheminement dans Angular 4. Je souhaite afficher l'URL comme ceci. Localhost: 4200/user/1 si j'ai cliqué sur les détails de vue du premier utilisateur. Je suis un peu confus sur la façon de procéder. J'ai essayé de mon mieux dans mon code ci-dessous, mais cela ne fonctionne toujours pas.
app-routage.module.ts
const appRoutes: Routes = [
{ path: '', redirectTo: '/dashboard', pathMatch: 'full' },
{ path: 'dashboard', component: DashboardComponent },
{ path: 'user', component: UserComponent, children: [
{ path: 'create-new-user', component: CreateNewUserComponent },
{ path: 'user-list', component: UserListComponent },
{ path: 'user-detail/:id', component: UserDetailComponent },
]},
];
@NgModule({
imports: [RouterModule.forRoot(appRoutes)],
exports: [RouterModule]
})
export class AppRoutingModule {
}
Dans votre fichier de routage
const appRoutes: Routes = [
{ path: '', redirectTo: '/dashboard', pathMatch: 'full' },
{ path: 'dashboard', component: DashboardComponent },
{ path: 'user', component: UserComponent, children: [
{ path: 'create-new-user', component: CreateNewUserComponent },
{ path: 'user-list', component: UserListComponent },
{ path: ':id', component: UserDetailComponent },
]}
];
A votre avis, faites comme ça
ViewuserDetail(user_id : any){
let url: string = "/user/" + user_id
this.router.navigateByUrl(url);
}
Dans votre template
<td><button class="btn btn-primary" (click)="ViewuserDetail(user_object.id)">View</button></td>
Je pense que votre méthode ViewDetail()
a besoin d’un paramètre d’indice .
public ViewDetail(index: number)
{
this.index = index;
...
}
Voici un excellent exemple ici pour le routage lui-même . Ils utilisent la définition de route suivante:
const routes: Routes = [
...
{ path: 'detail/:id', component: HeroDetailComponent },
...
];
En ce qui concerne le code TypeScript.
gotoDetail(): void {
this.router.navigate(['/detail', this.selectedHero.id]);
}
Donc, je pense que vous êtes sur la bonne voie là-bas.
Je pense que c'est juste que l'index n'est pas défini.
J'ai eu ce problème même il y a un moment. Le problème ici est la configuration des routes que vous avez. Vous ne pouvez pas accéder à/user/1 car vous avez défini la route "détails de l'utilisateur" en tant qu'enfant de la route "utilisateur". Vous devez soit accéder à '/ user/user-detail/1' ou simplement définir un nouvel itinéraire enfant avec path ': id' pointant vers votre composant de détails et vous pourrez maintenant accéder à '/ user/1'. .
En résumé: Avec les itinéraires:
const appRoutes: Routes = [
...
{ path: 'user', component: UserComponent, children: [
...
{ path: 'user-detail/:id', component: UserDetailComponent },
]},
];
vous pouvez naviguer vers '/user/user-details/1'.Avec les itinéraires:
const appRoutes: Routes = [
...
{ path: 'user', component: UserComponent, children: [
...
{ path: ':id', component: UserDetailComponent },
]},
];
vous pouvez naviguer vers '/user/1'.Hope cela vous aidera.
Ça devrait être quelque chose comme ça
ViewDetail(index : any){
this.router.navigate(['/user-detail', index]);
}
Si vous voulez que l'URL soit listée /user/1
, modifiez la configuration du routeur pour qu'elle corresponde au nom i: e au lieu de user-detail
, remplacez user
METTRE &AGRAVE; JOUR
Ya il y a changer la ligne de modèle à cette
<td><button class="btn btn-primary" style="cursor: pointer;" (click)="ViewDetail(i)">View</button></td> // it should be i instead of index