71

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

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

简而言之,当我加载项目 123 时,我想要发生的只是 URL 更改为:

www.myurl.com/#/Items

至:

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

没有任何路由发生。

最好的方法是什么?

4

1 回答 1

165

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

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

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

$location.search('id', 123);
于 2013-07-07T15:50:59.730 回答