AngularJS - ui router - Невозможно сопоставить ключ параметра url с восклицательным знаком - PullRequest
1 голос
/ 09 октября 2019

У меня есть несколько состояний в моем приложении, которые я определяю с помощью $ stateProvider следующим образом:

.state(STATES.s1,
  {
    url: "/?refnr"
    template: ...
  })
.state(STATES.s2,
  {
    url: "/?details&searchID&pos"
    template: ...
  })

Теперь я хочу иметь третье состояние, где я хочу перехватить все URL содержит определенный параметр URL, который включает восклицательный знак . Это параметр 'emp!' , который выглядит следующим образом в URL со значением "... /? Emp! = 45". Я определил это как мое состояние:

.state(STATES.s3,
  {
    url: "/?emp!"
    template: ...
  })

Не работает. Это не соответствует URL. Я также попытался использовать $ urlMatcherFactoryProvider и предоставить скомпилированное сопоставление в качестве URL, но тот же результат. Я также пытался использовать закодированную версию! в моем определении url-состояния вот так:

url: "/?emp%21" 

все тот же результат.

Почему это так? Как я могу сопоставить эти URL-адреса?

Ответы [ 2 ]

0 голосов
/ 02 ноября 2019

Попробуйте что-нибудь подобное. Выражение между фигурными скобками - это регулярное выражение, соответствующее вашим критериям.

.state(STATES.s3, {
  url: "/{^\?.*emp!$}"
  template: ...
})

Это регулярное выражение будет соответствовать URL-адресам, которые начинаются с ?, заканчиваются ! и имеют emp перед !. как:

  • ? пенька!
  • ? param = значение & темп!
0 голосов
/ 31 октября 2019

В этом примере вы можете использовать трюк с фальшивым параметром, и он будет обрабатывать все ваши URL, заканчивающиеся на "/? Emp!

.state(STATES.s3,
  {
    url: "/:anyurl/?emp!"
    template: ...
  })
...