Можете ли вы отключить вспомогательные / дополнительные маршруты в Angular? - PullRequest
0 голосов
/ 29 октября 2018

В моем приложении есть поле поиска, которое при отправке позволяет пользователям переходить по URL-адресу, например myapp.com/search/my search phrase here.

У меня есть маршрут, который прекрасно с этим справляется:

{ path: 'search/:q', component: SearchResultsComponent } 

Проблема в том, что если люди используют круглые скобки в своем поиске, например, «hello (world)», маршрутизатор дает сбой, потому что он ищет вспомогательный маршрут / дополнительный выход, определяемый частью внутри скобок.

Есть ли способ отключить эту функцию с помощью скобок и просто передать полный токен компоненту в маршруте?

1 Ответ

0 голосов
/ 31 октября 2018

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

// Add this somewhere
export const fixedEncodeURIComponent = (str: string) => {
  return encodeURIComponent(str).replace(/[!'()*]/g, (c) => {
    return '%' + c.charCodeAt(0).toString(16);
  });
};


// In your component
this.router.navigate(['search', fixedEncodeURIComponent(query)]);
...