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

7
在我的Angular应用程序中,我需要在用户离开特定页面之前警告他,而不是每个页面。
如果我在想要警告用户的页面的控制器中使用$locationChangeStart,则即使来到该页面也会触发,这是不希望的。
如果我将其放在父控制器上,则它将在任何地方触发,并且我必须添加一个复杂的if / else或switch结构来基本上告诉它除非用户正在放弃该特定状态,否则永远不会触发。
如何使用UI-Router检测用户实际上正在离开(只离开)特定状态?
1个回答

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
})

这个Q&A中有详细的解释和可工作的plunker:


可能需要在 event.preventDefault(); 下面添加 event.returnValue = 'something'; 才能显示警告。 - zenw0lf
3
这还有用吗?根据UI Router文档:“状态改变事件已被弃用、禁用,并在1.0版本中被转换钩子所取代。” - Tom Nijs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接