Маршрутизация разных модулей с одинаковыми путями - PullRequest
0 голосов
/ 26 февраля 2019

После того как я решил объединить два приложения Angular на мой предыдущий вопрос , я столкнулся с другой проблемой.Некоторые маршруты в app1 и app2 имеют одинаковый путь.

Вот пример:

app.routing.ts (root):

const routes: Routes = [
    {
        path: 'app1',
        loadChildren: './app1/app1.module#App1Module'
    },
    {
        path: 'app2',
        loadChildren: './app2/app2.module#App2Module'
    }
];

@NgModule({
    imports: [RouterModule.forRoot(routes)],
    exports: [RouterModule]
})

app1.routing.ts (App1):

const routes: Routes = [
    {
        path: 'page1',
        component: ./app1page1/app1page1.module#App1Page1Module
    }
];

@NgModule({
    imports: [RouterModule.forChild(routes)],
    exports: [RouterModule]
})

app2.routing.ts (App2):

const routes: Routes = [
    {
        path: 'page1',
        component: ./app2page1/app2page1.module#App2Page1Module
    }
];

@NgModule({
    imports: [RouterModule.forChild(routes)],
    exports: [RouterModule]
})

app1page1.routing.ts (App1 - Page1):

const routes: Routes = [
    {
        path: '',
        component: App1Page1Component,
        children: [
            {
                path: 'subpage1',
                component: App1Subpage1Component
            }
        ]
    }
]

 @NgModule({
    imports: [RouterModule.forChild(routes)],
    exports: [RouterModule]
})   

app2page1.routing.ts (App2 - Page1):

const routes: Routes = [
    {
        path: '',
        component: App2Page1Component,
        children: [
            {
                path: 'subpage1',
                component: App2Subpage1Component
            }
        ]
    }
]

 @NgModule({
    imports: [RouterModule.forChild(routes)],
    exports: [RouterModule]
})   

Проблема заключается в следующем: когда я перехожу, например, на www.mysite.com/app1/page1, меня перенаправляют на / app2 / page1.Как я могу исправить маршруты без указания всем уникального пути?

Заранее спасибо.

Обновление: я изменил пример, чтобы более точно описать мою ситуацию и лучше отразить в приложениисостав.В основном, есть два слоя loadChilden.Я заметил, что на самом деле не могу перейти к самим загруженным дочерним элементам app1 и app2 (т.е. если я перехожу в / app2 / page1 / subpage1, я перенаправлен в / app1 / page1 / subpage1).Под навигацией я имею в виду как ввод вручную URL-адреса в браузере, так и выполнение router.navigate в коде.

Обновление 2: после перезапуска приложения во время компиляции возникла ошибка:

ERROR in Duplicated path in loadChildren detected: "./page1/page1.module#Page1Module" is used in 2 loadChildren, but they point to different modules "(/src/app/app1/page1/page1.module.ts and "/src/app/app2/page1/page1.module.ts"). Webpack cannot distinguish on context and would fail to load the proper one.

Является ли единственным решением переименование модуля?

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Мне удалось исправить маршруты.Я понял, что некоторые модули имеют одинаковое имя в app1 и app2.Поэтому я переименовал их.

Но теперь вместо загрузки не той страницы выдается ошибка «модуль не найден».Даже после перезапуска сервера ошибка сохранилась.Решением было включить полный абсолютный путь в loadChildren (например, src / app / app1 ...).

0 голосов
/ 26 февраля 2019

Ну, к этому нельзя переходить.Хотя попытка присоединить

pathMatch: 'full' 

означает, что весь URL-путь должен совпадать и используется алгоритмом сопоставления маршрутов.

...