Trong ứng dụng Góc của chúng tôi, chúng tôi phải xử lý id có chứa "dấu chấm". Ví dụ:Angular ui-router với tham số truy vấn url chứa "dấu chấm"
book = {
id: '123.456'
}
Chúng tôi gặp sự cố khi sử dụng id như thông số url. Tất cả hoạt động tốt nếu điều hướng xảy ra thông qua "Góc", cụ thể là nhấp vào liên kết gọi số $state.go('bookDetails', {bookId: book.id});
. Nhưng mọi thứ không làm việc khi tải lại trang
"Không thể GET /bookDetails?bookId=123.456"
trong bộ điều khiển:
$scope.viewBookDetails = function() {
$state.go('bookDetails', {bookId: book.id});
}
trong giao diện
<a href="" ng-click="viewBookDetails(); $event.stopPropagation();">
trong bộ định tuyến:
.state('bookDetails', {
url: '/bookDetails?bookId'
}
trong trình duyệt:
https://example.com/bookDetails?bookId=123.456
Liên kết hoạt động nếu "dấu chấm" được thay thế bằng %2E
trong trình duyệt.
Chúng tôi đã cố gắng để thay thế "chấm" với "% 2E" trong tham số với $ state.go()
$scope.viewBookDetails = function() {
$state.go('bookDetails', {bookId: book.id.split('.').join('%2E')});
}
nhưng không làm việc vì "%" được tự động mã hóa và "chấm" trong trình duyệt được thay thế bằng "% 252E"
https://example.com/bookDetails?bookId=123%252E456
có lẽ sử dụng sluggify cho việc này: https://github.com/paulsmith/angular-slugify tôi không chắc chắn nếu nó hoạt động trong trường hợp của bạn. – Michelangelo