如何在不做路由的情况下在AngularJS中设置查询参数?


72

我的Angular应用程序允许用户加载项目,当发生这种情况时,我想设置一个包含该项目ID的查询字符串,以便如果用户刷新页面(或想要链接到该页面),则URL已经存在设置(如果$ routeParams中包含ID,则已经有代码可以加载该项目)。

如何设置该查询参数而不引起路由?如果发生路由,页面上还有其他内容会重置(包括必须重新加载其所有数据的插件),因此仅更改查询参数很重要。

简而言之,当我加载项目123时,我要做的就是URL从以下位置更改:

www.myurl.com/#/Items

至:

www.myurl.com/#/Items?id=123

没有进行任何路由。

最好的方法是什么?

Answers:


165

$ routeProvider配置中设置reloadOnSearch为false:

$routeProvider
  .when('/items', {
    controller: 'ItemsCtrl',
    templateUrl: '/templates/items',
    reloadOnSearch: false
  },
  ...
);

并在控制器中用于$location.search()设置id参数:

$location.search('id', 123);

4
设置查询字符串时,我有一些非常奇怪的行为。reloadOnSearch: false是我的关键。
詹姆斯·哈灵顿
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.