使用Angular UI-Router更改URL,不执行任何其他操作

时间:2014-08-04 20:25:10

标签: angularjs angular-ui-router

在没有运行所有其他进程的情况下,似乎没有更新网址的内置方法,例如调用控制器。

选项"重新加载",仅适用于$location.search()

是否有方法或方法来实现

我如何实现类似的目标:

$state.go('stateName', params, {justChangeTheUrl: true})

使用Angular UI-Router?

2 个答案:

答案 0 :(得分:3)

如果您只想更改网址而不需要ui-router处理该更改,那么您可以使用以下完全可接受的黑客(coffeescript):

scopeOff = $scope.$on '$stateChangeStart', (e) ->
  e.preventDefault()
  scopeOff()

$location.path 'just/change/the/url'

备注

通常通过$location.path()更改浏览器网址会触发ui-router开始处理。此处理从名为$stateChangeStart的ui-router特定事件开始。

但是,在上面的代码中,您正在捕捉并通过e.preventDefault()丢弃对$stateChangeStart事件的初始调用,从而阻止ui-router处理网址更改。

$stateChangeStart事件上的监视是“单独使用”,即一次运行后代码会自动从事件中分离(这是对scopeOff()的调用)。

最终效果是在不触发ui-router处理的情况下更改浏览器中的url,并仅将此限制应用于刚刚更改的网址。整洁,但不像新的deferIntercept功能那样整洁。

答案 1 :(得分:0)

在url中定义状态参数

 $stateProvider.state('stateName', {
     url: '/state/path?reload'
 });

但请注意,$location.search() param上的每次reload更改都会触发$stateChangeStart事件,并且您的控制器将被重新创建