Сложное регулярное выражение в угловых маршрутах - PullRequest
0 голосов
/ 06 июня 2019

Мы переносим наш сайт с YII2 на AngularJS (6.1).В YII2 мы используем регулярные выражения для некоторых URL. Например: -

 s/<content:[\w\ ,.]+>-wholesale-supplier-in-<country:\w+>

Поэтому мы добавили это регулярное выражение в файл app-routing.module.ts

Мы пытались добавить то же регулярное выражениев файле app-routing.module.ts, потому что мы не хотим менять наши URL.Поэтому мы добавили этот код в файл угловых маршрутов

const routes: Routes = 
      [{
         path:'s/:searchstring-wholesale-supplier-in-:country',
         component:SearchdataComponent
    }}

Мы также попробовали это

     const routes: Routes = 
      [{
         regex:'s/<searchstring:[\w\ ,.]+>-wholesale-supplier-in-<country:\w+>',
         path:'s/:searchstring-wholesale-supplier-in-:country',
         component:SearchdataComponent
    }}

Но когда мы используем этот тип регулярного выражения, тогда его показ

Cannot match any routes. URL Segment: 's/apple-wholesale-supplier-in-canada'

и со вторым кодом мы не можем получить доступ к каким-либо параметрам.

Как мы можем добиться такой же URL-маршрутизации в угловых?

1 Ответ

0 голосов
/ 06 июня 2019

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

function customMatcher(url: UrlSegment[]) {
  let re = /<content:[\w\ ,.]+>-wholesale-supplier-in-<country:\w+>/;
  return url.length === 2 && url[0].path === 's' && re.test(url[1].path) ? ({consumed: url}) : null;
}

, затем определите ваш маршрут:

{
     matcher: customMatcher,
     component:SearchdataComponent
}

это не проверено, но должно иметь желаемый результат соответствия.Но вам все равно придется разбирать параметры самостоятельно.

...