Как пройти "вопросительный знак" в url javascript

В приложении 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".

Как это можно сделать?

Ответ 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`