在没有运行所有其他进程的情况下,似乎没有更新网址的内置方法,例如调用控制器。
选项"重新加载",仅适用于$location.search()
是否有方法或方法来实现
我如何实现类似的目标:
$state.go('stateName', params, {justChangeTheUrl: true})
使用Angular UI-Router?
答案 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
事件,并且您的控制器将被重新创建