如何在URL中传递“问号”

在Angularjs应用程序中,我有一个像
http://url.com/my_app/#/store/items
现在我想追加查询string为例,
http://url.com/my_app/#/store/items?page=2

但在URL中,JavaScript编码"?" to "%3F" "?" to "%3F"我不想要的"?" to "%3F" 。 它应该保持“?” 只有在url为angularjs $ location.search()没有返回任何“%3F”。

如何做到这一点?

在你的问题中没有足够的细节,所以我将假设你在非HTML5模式下使用AngularJS路由 – 或者至less是$ location服务 。 如果是这样的话, #字符后面的部分就代表你的单页面应用程序的URL(更多关于AngularJS的信息 )。

如果上述假设是正确的,则意味着您不应该尝试添加或操作问号“手动” 。 相反,你应该改变$locationsearch部分来操纵查询string( ?之后的部分),问号将根据需要添加/删除到最终的URL。

在你的情况下,你可以写:

 $location.path('/store/items').search('page', 2) 

这是假设你正在操纵JavaScript的URL,正如你的问题所述。

如果您正在使用$ location服务,请改用$location.url('/store/items?page=2') 。 这是一个从至less1.0.7的setter方法,并在我的1.1.5应用程序中工作。

你可以创build一个参数对象,如:

 var param = { page: 2 } $location.url("/store/items").search(param) 

如果你使用强烈推荐的ui-router ,你可以使用$state.go(to, params, options)如下所述。

作为先决条件,您需要正确定义您的状态,这意味着每个可能的查询参数都必须通知ui路由器。 看下面的例子( pageotherParam ):

 $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' }); }; 

没有编码需要和高度可读的摆弄!

你可以使用decodeURIComponent 。

例如:

 decodeURIComponent('http://url.com/my_app/#/store/items%3Fpage=2'); // will give you `http://url.com/my_app/#/store/items?page=2`