Ленивая загрузка углового маршрутизатора: два разных модуля, которые начинаются с одного пути - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть два модуля, каждый из которых имеет два дочерних маршрута.
Первый модуль использует маршруты как:
товар /: ID
items /: id / print

Второй:
элементы /: идентификатор / редактировать
items /: id / marketing

Так что я думаю, как сделать конфиг для такого случая:

export const appRoutes: Routes = [
    {
        loadChildren: './features/item-details/item-details.module#ItemDetailsModule',
        path: 'items/:id'
    },
    {
        loadChildren: './features/item-management/item-management.module#ItemManagementModule',
        path: 'items/:id'
    }
];

Я не хочу объединять эти два модуля, поскольку в этом нет ничего общего.
А также мне не нравится идея разделить его на 4 разных модуля.

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

На самом деле есть способ сделать это с помощью UrlMatcher. Вы можете проверить целевой URL для загрузки или нет модуля. https://angular.io/api/router/UrlMatcher

const managmentMatcher = (segments: UrlSegment[]) => {

    return /^\/*items\/\d+\/(edit|marketings)\/*.test(segments.join('/')) ?
       { consumed: segments.slice(0, 2), posParams: { id: segments[1] } } : null;

}

export const appRoutes: Routes = [
    // special routes
    {
        loadChildren: './features/item-management/item-management.module#ItemManagementModule',
        matcher: managmentMatcher
    },
    // default routing for items/:id
    {
        loadChildren: './features/item-details/item-details.module#ItemDetailsModule',
        path: 'items/:id'
    }
];
0 голосов
/ 08 ноября 2018

Вы используете один и тот же путь для разных модулей, почему бы не переключить пути, и у вас будет более изолированный модуль и отделенный от проблем.

export const appRoutes: Routes = [
    {
        loadChildren: './features/item-details/item-details.module#ItemDetailsModule',
        path: 'items/details/:id'
    },
    {
        loadChildren: './features/item-management/item-management.module#ItemManagementModule',
        path: 'items/management/:id'
    }
];
...