Different routes same component

后端 未结 4 1434
眼角桃花
眼角桃花 2021-01-01 12:06

I want to achieve something like this /products shows all the products and /products/:category shows all the products related to a specific categor

相关标签:
4条回答
  • 2021-01-01 12:14

    you can solve it by adding routes

    const routes: Routes = [
        { path: 'experience',
            children: [
                { path: 'pending', component: ExperienceComponent },
                { path: 'requests', component: ExperienceComponent },
            ] }]
    

    and in ExperienceComponent import

    import { ActivatedRoute } from "@angular/router";
    

    and in constructor add this parameter

    constructor(public route: ActivatedRoute)
    

    and inside constructor get url

    this.route.url.subscribe(params => {
      console.log(params[0].path);
    })
    
    0 讨论(0)
  • 2021-01-01 12:16

    I don't know if there is another way to do this but I managed to make it work using the following hack.

    export const productsRoutes: Route[] = [
        {
            path: 'products',
            component: ProductsComponent,
            children: [
                {
                    path: '',
                    pathMatch: 'prefix',
                    component: ProductsListComponent,
                    children: [
                        {
                            path: '',
                            component: EmptyComponent,
                        },
                        {
                            path: ':category',
                            component: EmptyComponent,
                        },
                    ],
                },
            ],
        },
    ];
    

    EmptyComponent:

    import { Component } from '@angular/core';
    
    @Component({
        selector: 'GemainEmpty',
        template: '<router-outlet></router-outlet>',
    })
    export class EmptyComponent {
    }
    

    Handle route changes on the ListComponent:

    ngOnInit() {
        this.routerEventsSubscription = this.router.events.subscribe((evt) => {
            if (!(evt instanceof NavigationEnd)) {
                return;
            }
            //Code to reload/filter list
        }
    }
    

    And add a router outlet on the ListComponent template.

    0 讨论(0)
  • 2021-01-01 12:26

    You could also define a redirect to a specific path:

    { path: '**', redirectTo: '/home', pathMatch: 'full' },
    

    where /home is the route you want to redirect to.

    path: '**' resolves all paths which are not defined

    0 讨论(0)
  • 2021-01-01 12:34

    You can solve it by using redirect,

    const productsRoutes: Routes = [
      {
        path: 'products',
        component: ProductsComponent,
        children: [
            {
                // path => '/products'
                path: '',
                redirectTo: ':category',
            },
            {
                // path => '/products/:category'
                path: ':category',
                component: ProductsListComponent
            }
        ]
      }
    ];
    

    It's more like set one path default, unless there is a matching path.

    0 讨论(0)
提交回复
热议问题