在Angularjs app中,我有一个像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”返回任何内容。
如何做到这一点?
答案 0 :(得分:82)
您的问题中没有足够的详细信息,因此我假设您在非HTML5模式下使用AngularJS路由 - 或者至少使用$location service。如果是这样,#
字符后面的部分将从单页面应用程序的角度表示您的URL(更多关于AngularJS here)。
如果上述假设是正确的,则表示您不应尝试“手动”添加或操纵问号。相反,您应该更改search
的{{1}}部分来操纵查询字符串($location
之后的部分),并根据需要将问号添加/删除到最终的网址。
在你的情况下你可以写:
?
这假设您正在操纵JavaScript中的URL,如您的问题中所述。
答案 1 :(得分:24)
如果您使用的是$ location服务,请改用$location.url('/store/items?page=2')
。这是一个至少1.0.7的setter方法,并在我的1.1.5 app中使用。
答案 2 :(得分:2)
您可以创建一个参数对象,如:
var param = {
page: 2
}
$location.url("/store/items").search(param)
答案 3 :(得分:1)
如果您使用强烈推荐的 ui-router ,则可以使用here所述的$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'
});
};
无需摆弄所需的编码且具有高可读性!
答案 4 :(得分:-2)
您可以使用decodeURIComponent。
例如:
decodeURIComponent('http://url.com/my_app/#/store/items%3Fpage=2');
// will give you `http://url.com/my_app/#/store/items?page=2`