如何在AngularJS中设置查询参数而不进行路由?

73
我的Angular应用程序允许用户加载一个项目,当发生这种情况时,我希望设置一个查询字符串,其中包含该项目的Id,以便如果用户刷新页面(或想要链接到它),URL已经设置好了(如果$routeParams中存在Id,则已经有代码来加载该项)。
我如何设置该查询参数而不导致路由?如果发生路由,页面上的其他内容将被重置(包括必须重新加载所有数据的插件),因此仅更改查询参数非常重要。
简而言之,当我加载项目123时,我只希望发生以下情况:
从:
www.myurl.com/#/Items
变为:
www.myurl.com/#/Items?id=123
而不需要进行任何路由操作。
最好的方法是什么?
1个回答

168

在你的$routeProvider配置中将reloadOnSearch设置为false:

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

在您的控制器中使用$location.search()来设置id参数:

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

4
当我设置查询字符串时,遇到了一些非常奇怪的行为。reloadOnSearch: false 对我来说是关键。 - James Harrington

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接