如何在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的信息 )。
如果上述假设是正确的,则意味着您不应该尝试添加或操作问号“手动” 。 相反,你应该改变$location
的search
部分来操纵查询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路由器。 看下面的例子( 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' }); };
没有编码需要和高度可读的摆弄!
你可以使用decodeURIComponent 。
例如:
decodeURIComponent('http://url.com/my_app/#/store/items%3Fpage=2'); // will give you `http://url.com/my_app/#/store/items?page=2`