使用angular ui路由器防止stateChange而不使用$ rootScope

时间:2015-01-05 20:29:22

标签: angularjs angular-ui-router

我的用户可以离开状态,但在我想要显示模式对话框之前“你要保存吗?”

仅当用户数据变脏时才意味着更改。

我不想要的是将我的EditController中的isDirty属性粘贴到$ rootScope转到stateChangeStart事件并检查isDirty然后显示/不显示保存对话框。

防止全局变量说每个javascript初学者书......

1。)那么在不破坏$ rootscope的情况下防止状态改变的专业方法是什么?

2。)ui-router是否有任何辅助库可以增强控制器内部的ui-router提供函数钩子来封装ui逻辑?

3 个答案:

答案 0 :(得分:55)

(1)根据状态变更事件

下的docs
 $rootScope.$on('$stateChangeStart', 
      function(event, toState, toParams, fromState, fromParams){ 
          event.preventDefault(); 
          // transitionTo() promise will be rejected with 
          // a 'transition prevented' error
 })

您可以在适当的地方将$ rootScope更改为$ scope。

将自定义数据附加到状态对象下,您可以传递自定义数据。

(2)我不确定你问的是什么,但工厂/服务/供应商真的会有所帮助。

答案 1 :(得分:13)

使用$ transitions.onStart(angular-ui-router 1.0.0-rc)可以返回一个布尔值。如果false转换将被取消。

$transitions.onStart({}, function (trans) { 
    var answer = confirm("Want to leave this page?")
    if (!answer) {
        return false;
    }
});

以下是文档:https://ui-router.github.io/ng1/docs/latest/modules/transition.html#hookresult

答案 2 :(得分:2)

虽然在编写本文时它不是稳定版本的一部分,但UI路由器的1.0版本将使用onEnter / onExit的返回值来阻止导航。

请参阅GitHub issue 2219