使用angularjs和ui-router,如何禁用一个视图更改的导航器历史记录

Mav*_*arn 8 angularjs angular-ui-router

我希望当前的状态更改不会保存在导航历史记录中.然后,当用户单击"返回"时,将跳过视图并返回上一页.

我可以暂时禁用状态更改以保存在导航历史记录中吗?

EeK*_*Kay 6

我相信这是ui-router的值为{location:'replace'}的选项参数.

文档说明:

location布尔或"替换"(默认为true),如果为true将更新位置栏中的URL,如果为false则不会.如果字符串"replace",将更新url并替换上一个历史记录.

似乎有一个问题(在GitHub上看到它)要修复.


bio*_*tal 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'
Run Code Online (Sandbox Code Playgroud)

当位置更改时(您也可以使用$stateChangeStart),您检查当前状态,如果它是您不想要的状态,则转到您想要的状态。这event.preventDefault()实际上停止了最初请求状态的处理。

如果您需要更脏的版本,那么您可以检查位置 url 而不是状态并用于$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'
Run Code Online (Sandbox Code Playgroud)