В приложении Angularjs у меня есть URL-адрес, например http://url.com/my_app/#/store/items
.
Теперь я хочу добавить строку запроса, например, http://url.com/my_app/#/store/items?page=2
.
но в url javascript кодирует "?" to "%3F"
, который я не хочу. Он должен оставаться"? "только в URL-адресе, поскольку angularjs $location.search() ничего не возвращает для" % 3F".
Как это можно сделать?
Как пройти "вопросительный знак" в url javascript
Ответ 1
В вашем вопросе недостаточно подробностей, поэтому я предполагаю, что вы используете маршрутизацию AngularJS - или, по крайней мере, $location service - в режиме, отличном от HTML5. Если это так, часть после символа #
представляет ваш URL-адрес с точки зрения одностраничного приложения (подробнее об AngularJS здесь).
Если приведенные выше предположения верны, это означает, что вы не должны пытаться добавлять или манипулировать вопросительным знаком "вручную" . Вместо этого вы должны изменить часть search
$location
, чтобы манипулировать строкой запроса (часть после ?
), и вопросительный знак будет добавлен/удален до конечного URL-адреса по мере необходимости.
В вашем случае вы можете написать:
$location.path('/store/items').search('page', 2)
Это предполагает, что вы манипулируете URL-адресами из JavaScript, как указано в вашем вопросе.
Ответ 2
Если вы используете службу определения местоположения $, вместо этого используйте $location.url('/store/items?page=2')
. Это был метод setter, по крайней мере, с 1.0.7 и работает в моем приложении 1.1.5.
Ответ 3
вы можете создать объект параметра, например:
var param = {
page: 2
}
$location.url("/store/items").search(param)
Ответ 4
Если вы используете ui-router, который настоятельно рекомендуется, вы можете использовать $state.go(to, params, options)
, как описано здесь.
В качестве предпосылки вам необходимо правильно определить ваше состояние, что означает, что каждый возможный параметр запроса должен быть известен ui-router. См. Следующий пример (page
и otherParam
):
$stateProvider.
state('storeItems', {
url: '/store/items?page&otherParam',
templateUrl: '/modules/store/views/item.client.view.html'
});
И тогда вы можете просто переключать места для экземпляра с контроллера, вызывая
$scope.gotoItemsPage = function(page) {
$state.go('storeItems', {
page: page,
otherParam: 'Just a show off'
});
};
Нет необходимости в кодировании, требуемом и читаемом!
Ответ 5
Вы можете использовать decodeURIComponent.
Например:
decodeURIComponent('http://url.com/my_app/#/store/items%3Fpage=2');
// will give you `http://url.com/my_app/#/store/items?page=2`