6

我只是$stateChangeStart$transitions.onStart

$rootScope.$on('$stateChangeStart', function(e, ...){
     e.preventDefault();
     // other code goes here...
});

$transitions.onStart({}, function(tras){
     // need a code equivalent to e.preventDefault
     // need a code to identify event.defaultPrevented 
     // other code goes here...

     // get parent states
     _o.util.getAncestorStates(toState.name, true).reverse()
        .forEach(function (state) {
           // certain condition to call event.preventDefault()

           if(event.defaultPrevented) {....}
     });
});

return $q.reject()我想,我们可以通过添加而不是阻止转换,e.preventDefault()但我不明白下面的代码return $q.reject()将如何执行。

另外,我该如何更换event.defaultPrevented

我觉得应该做点什么就对了transition.promise但不清楚。

对不起,我看不懂官方文档 - https://ui-router.github.io/ng1/docs/latest/很容易。任何人都可以帮我找到更好的解释或替换上述代码吗?

4

1 回答 1

8

您可以根据您的逻辑选择以下两个选项之一:

  • angular-ui-router 1.0.3 开始,您可以使用$transition.abort(). 如果您必须在异步调用后中止状态更改,则选择更简洁。

    $transitions.onStart({}, function($transition) {
        $transition.abort();
        //more code...
    });
    
  • 此外,正如@tanmay 在评论中所说,您可以使用一个简单return false的来取消它。这也适用于非稳定版本(1.0.0.beta 和 1.0.0.rc)。(在 ui-rooter 文档中检查它

    $transitions.onStart({}, function($transition) {
        //code ...
        return false;
    });
    
于 2017-05-11T04:16:38.217 回答