14

我有几条不同的路线,但包含相似的参数。
例子:

when '/user/:accountId/charts/:chartType', controller:ChartsController
when '/manager/:accountId/charts/:chartType', controller:ChartsController
when '/whatever/pathy/paththingy/charts/:chartType', controller:ChartsController

请注意,所有三个视图都使用相同的 Charts Controller 来控制视图。它是一个相当通用的控制器,但它需要在可用的图表类型之间切换......同时保留其余的路线。
示例:(这不起作用)

if my currrent url is '/user/001/charts/comparison'
Then I call something like:
$route.current.params.chartType = 'newChart';
$route.reload(); // or soemthing similar?
I want the url to become '/user/001/charts/newChart'

有谁知道如何在不完全重新键入或重建路由路径的情况下轻松更新路由参数?

4

3 回答 3

13

从 angular 1.3 开始,您可以使用它$route.updateParams(newParams)来更改路由参数。

这是来自角度文档的引用...

$route.updateParams(newParams);

使$route服务更新当前 URL,将当前路由参数替换为newParams. 提供的与路线的路径段定义匹配的属性名称将被插入到位置的路径中,而其余属性将被视为查询参数。

于 2015-01-20T23:30:42.680 回答
10

如果可能的话,我建议您改用ui-router。它在很多方面都比 ngRoute 更强大。

本质上,这个模块有一个更高级别的概念,称为状态包装底层路由,它可以防止您直接使用路由 url 等较低级别的路由。

比较:angular-route 和 angular-ui-router 有什么区别?

使用 ui-router,您可以像这样实现代码:

$stateProvider
  .state('user.chart', {
     url: '/user/:accountId/charts/:chartType',   
     controller: "ChartsController"   
  })
 .state('manager.chart', {
     url: '/manager/:accountId/charts/:chartType', 
     controller: "ChartsController"
  })
 .state('pathy.chart', {
     url: '/whatever/pathy/paththingy/charts/:chartType', 
     controller: "ChartsController"
  })

您可以使用此代码在状态之间导航:

$state.go('user.chart',{chartType:'newChart'},{inherit:true});

文档

于 2014-07-23T02:52:53.797 回答
5

缺少这个简单的功能让我很恼火,所以我实现了它并在 GitHub 上提交了 PR

于 2014-07-26T23:46:14.727 回答