дети углового маршрута на основе переменных сегментов - PullRequest
0 голосов
/ 05 июня 2018

У меня есть шаблон URL в одном и том же месте, но он заканчивается разными данными.

Пример:

Имейте в виду, что и "detail", и "object" являются динамическими, например:detail1-category, detail2-category, detail3-category, object1, object2, objectt3.

URL1 = /url/detail-category

URL2 = /url/object

Мне нужно загрузить детейв зависимости от того, заканчивается ли URL «-категорией» или нет, я использую matcher, но я теряю переменную «path», поскольку matcher и path нельзя использовать одновременно.

Оригинал:

{ path: 'url/:id',  
    loadChildren: './modules/child.module#ChildModule'
},

Обновлено:

{ matcher: categoriesMatcher, 
    loadChildren: './modules/child.module#ChildModule'
},

export function categoriesMatcher(url: UrlSegment[]) {
    return url.length === 1 && url[0].path.endsWith('-category') ? ({consumed: url, path: url}) : null;
  }

// вышесказанное частично взято отсюда, и это работает, но мы теряем данные, которые диктуют поведение компонента. Угловые 2 разных компонента с одинаковым маршрутом

1 Ответ

0 голосов
/ 05 июня 2018

Сопоставитель может предоставить параметры как часть логики сопоставления.Возвращаемое значение должно содержать свойство posParam со значениями каждого параметра маршрута.

Например:

export function MyAwesomeMatcher ( url: UrlSegment[] ): UrlMatchResult {
    if (url.length === 0) {
        return null;
    }
    const reg = /^(awesome-path)$/;
    const param = url[ 0 ].toString();
    if (param.match( reg )) {
       // myValue: "awesome-path"
       return ({ consumed: url, posParams: { myValue: url[ 0 ] } });
   }
   return null;
}

// define application routes.
const routes: Routes = [
   { path: '', component: HomeComponent, pathMatch: 'full' },
   { matcher: MyAwesomeMatcher, component: MyAwesomeComponent }
   ...
];

Код для примера выше скопирован отсюда:

https://gist.github.com/anein/fba647b4206695d109c30e1fc0d2e8ee

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