Angular 9 маршрутизация к дочернему компоненту в ленивом загруженном модуле - PullRequest
0 голосов
/ 14 апреля 2020

У меня проблема с настройкой маршрутизации к дочернему компоненту в загруженном модуле.

app.routing.ts

export const routes: Routes = [
    {
        path: 'admin',
        loadChildren: () => import('./admin/admin.module').then(m => m.AdminModule),
    },
];

admin.routing.ts

export const routes: Routes = [
    {
        path: '',
        component: AdminPanelComponent,

        children: [
            {
                path: '',
                redirectTo: 'user/list',
                pathMatch: 'full'
            },
            {
                path: 'user/list',
                canActivate: [AdminGuard],
                component: UserListComponent,
            },
            {
                path: 'user/new',
                canActivate: [AdminGuard],
                component: UserComponent,
            }
        ]
    }

];

Когда I go на https://localhost/admin приложение не перенаправляется на https://localhost/admin/user/list, как ожидалось, но на https://localhost.

AdminPanelComponent - это компонент макета пользовательского интерфейса для модуля администратора.

Есть предложения?

ОБНОВЛЕНИЕ: та же проблема с лениво загруженным модулем без дочерних компонентов

app.routing.ts

export const routes: Routes = [
    {
        path: 'agent',
        loadChildren: () => import('./agent/agent.module').then(m => m.AgentModule),
    },
];

agent.routing. ts

export const routes: Routes = [
    {
        path: '',
        component: AgentPanelComponent,
    },

];

Когда я go на https://localhost/agent приложение перенаправляется на https://localhost.

ОБНОВЛЕНИЕ: я нашел проблема и исправлена, но не могу объяснить, почему это не работает.

app.routing.ts

export const routes: Routes = [
        {
            path: 'auth',
            loadChildren: () => import('./auth/auth.module').then(m => m.AuthModule),
        },
        {
            path: 'admin',
            loadChildren: () => import('./admin/admin.module').then(m => m.AdminModule),
        },
        {
            path: 'agent',
            loadChildren: () => import('./agent/agent.module').then(m => m.AgentModule),
        },

    ];

Модуль администратора и агент используют модуль аутентификации.

auth.routing.ts

export const routes: Routes = [
    {
        path: '',
        canActivate: [RedirectIfLoggedInGuard],
        component: LoginPageComponent
    },
    {
        path: 'password-reset',
        canActivate: [RedirectIfLoggedInGuard],
        component: LoginPasswordResetComponent
    },
];

В auth.routing.ts я изменил path с этого

{
            path: '',
            canActivate: [RedirectIfLoggedInGuard],
            component: LoginPageComponent
        },

на этот

{
            path: 'login',
            canActivate: [RedirectIfLoggedInGuard],
            component: LoginPageComponent
        },

И теперь он работает нормально.

Ответы [ 2 ]

1 голос
/ 14 апреля 2020

Я решил вашу проблему ниже в stackBlitz, есть много способов, которыми он может go ошибиться. поэтому вместо того, чтобы объяснить все это, вы можете взглянуть на эту реализацию?

https://stackblitz.com/edit/angular-j1s19b

и спросите, есть ли у вас какие-либо Конкретная проблема в комментариях ниже, я постараюсь вам помочь.

Если это решит вашу проблему. пожалуйста, пометьте этот ответ как принятый за то, что он стоит ?.

0 голосов
/ 14 апреля 2020

В admin.routing.ts необходимо убедиться, что вы добавили: RouterModule.forChild(routes) в imports.

В app.routing.ts вам необходимо добавить RouterModule.forRoot(routes)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...