Угловой UI-маршрутизатор с параметром URL-запроса, содержащим «точку»
В нашем приложении Angular мы имеем дело с идентификаторами, которые содержат «точку». Например:
book = {
id: '123.456'
}
У нас проблемы с использованием таких идентификаторов как параметры URL. Все работает хорошо, если навигация происходит через «Angular», а именно, нажав на ссылку, которая вызывает$state.go('bookDetails', {bookId: book.id});
, Но вещи не работают при перезагрузке страницы
"Невозможно получить /bookDetails?bookId=123.456"
в контроллере:
$scope.viewBookDetails = function() {
$state.go('bookDetails', {bookId: book.id});
}
в представлении
<a href="" ng-click="viewBookDetails(); $event.stopPropagation();">
в роутере:
.state('bookDetails', {
url: '/bookDetails?bookId'
}
в браузере:
https://example.com/bookDetails?bookId=123.456
Ссылка работает, если "точка" заменена на%2E
в браузере.
Мы попытались заменить «точку» на «% 2E» в параметре для $ state.go ()
$scope.viewBookDetails = function() {
$state.go('bookDetails', {bookId: book.id.split('.').join('%2E')});
}
но не работает, потому что «%» автоматически кодируется, а «точка» в браузере заменяется на «% 252E»
https://example.com/bookDetails?bookId=123%252E456