如何在url javascript中传递“问号”

时间:2013-03-04 09:01:38

标签: javascript angularjs

在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”返回任何内容。

如何做到这一点?

5 个答案:

答案 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必须知道每个可能的查询参数。请参阅以下示例(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'
  });
};

无需摆弄所需的编码且具有高可读性!

答案 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`