我希望当前状态更改不会保存在导航历史记录中。然后,当用户点击'后退时,将跳过该视图并返回上一页。
我可以暂时禁用状态更改以保存在导航历史记录中吗?
答案 0 :(得分:6)
我相信这是ui-router的值为{ location:'replace'}的选项参数的用途。
文档说明:
location布尔值或"替换" (默认为true),如果为true则会更新 url在位置栏中,如果为false则不会。如果字符串"替换",将 更新网址并替换上次历史记录。
似乎有一个问题(见here on GitHub)要修复。
答案 1 :(得分:2)
本着stackoverflow的精神,我会尝试回答这个问题而不是提到你要求的是一个真正可怕的黑客; - )
我想你可能需要这样的东西。 (代码是coffeescript)
angular
.module 'app', ['ui.router']
.run ($rootScope, $state) ->
$rootScope.$on '$locationChangeStart', (event) =>
if $state.is 'bad-state'
event.preventDefault()
$state.go 'good-state'
当位置发生变化时(您也可以使用$stateChangeStart
),您可以检查当前状态,如果它是您不想要的状态,那么您将进入您想要的状态。 event.preventDefault()
有效地停止了对最初请求状态的处理。
如果您需要更脏的版本,那么您可以检查位置网址而不是状态,并使用$location.url
执行转移,如下所示:
angular
.module 'app', ['ui.router']
.run ($rootScope, $location) ->
$rootScope.$on '$locationChangeStart', (event, nextLocation) =>
if nextLocation is '/bad/location'
event.preventDefault()
$location.path '/good/location'
答案 2 :(得分:0)
这对我有用。
$rootScope.$on('$stateChangeStart',
function(event, toState, toParams, fromState, fromParams){
event.preventDefault();
window.history.forward();
});