Angular ui-router:离开特定页面时警告用户

Tia*_*ago 7 javascript angularjs angular-ui-router

在我的角度应用程序,我需要他之前警告用户离开一个特定的网页,而不是每一个页面.

如果我$locationChangeStart在页面的控制器中使用我要警告用户的内容,即使进入页面也会触发,这是不希望的.

如果我在父控制器上使用它,它将在任何地方触发,我必须添加复杂的if/else或switch结构,基本上告诉它永远不会触发,除非用户放弃该特定状态.

如何检测用户实际离开(并且仅离开)特定的stateUI-Router?

Rad*_*ler 6

您应该使用一个事件(并挂在您自己的监听器上)

$ stateChangeStart

状态转换开始时触发。您可以使用event.preventDefault()来防止发生过渡,然后过渡承诺将被拒绝并带有“防止过渡”值。

...

例:

$rootScope.$on('$stateChangeStart',
function(event, toState, toParams, fromState, fromParams){
    event.preventDefault();
    // transitionTo() promise will be rejected with
    // a 'transition prevented' error
})
Run Code Online (Sandbox Code Playgroud)

此问答中有详细的说明和有效的插件:

  • 这仍然可行吗?根据ui-router的文档,“从1.0版开始,状态更改事件已被弃用,禁用并由Transition Hooks取代。” (3认同)