Одно требование к приложению, с которым я работаю, - поддержка нескольких префиксов маршрута.
т.е. /shop
и /store
должны совпадать. Я добился этого с помощью пользовательского UrlMatcher:
matchPathsStartingWith(startingWith: string[]) {
return (url: UrlSegment[]): UrlMatchResult => {
if (url.length) {
let s = url.map(u => u.path).join('/');
console.log(s);
if (startingWith.includes(url[0].path)) {
return { consumed: url };
}
}
return null;
};
}
Я использую это следующим образом:
{
matcher: new UrlPathMatcher().matchPathsStartingWith([
'store',
'shop',
]),
loadChildren:
'app/store.module#StoreModule',
},
Затем в моем модуле магазина определены следующие маршруты:
const routes: Routes = [
{
path: '',
component: StoreDashboardComponent,
},
{
path: 'products',
component: ProductsListComponent,
},
];
Проблема, с которой я сталкиваюсь, заключается в том, что это соответствует только первому маршруту (то есть StoreDashboardComponent
, но не ProductsListComponent
. Я предполагаю, что это связано с тем, что возвращает моя пользовательская функция сопоставления.
Что я должен вернуть для достижения желаемой функциональности?
Редактировать: Если я полностью избавляюсь от URLMatcher и вместо этого создаю два отдельных маршрута для «магазина» и «магазина», все работает нормально.