【发布时间】:2017-05-10 09:32:11
【问题描述】:
我刚刚将$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/。谁能帮我找到更好的解释或替换上述代码?
【问题讨论】:
-
我认为你可以从
.onStart中的return false取消转换.. -
好的,我刚刚添加了更多 sn-p 以了解为什么我需要
event.defaultPrevented- 我处理所有父状态并在特定条件下调用event.preventDefault并检查event.defaultPrevented是否有任何其他父州。 -
使用承诺链,如果前一个块取消,则后续
.then块中的代码将被跳过。如果前一个处理程序取消转换,则永远不会调用onStart处理程序。event.defaultPrevented在onStart处理程序中永远不会是true。相反,onError处理程序链被调用,并且只有当且仅当event.defaultPrevented为真时才会调用这些块。
标签: javascript angularjs angular-ui-router angular-ui angularjs-1.6