angular-ui-路由器 1.0.x: event.preventDefault & event.defaultPrevented 备选方案
angular-ui-router 1.0.x: event.preventDefault & event.defaultPrevented alternative
我刚刚将 $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/。谁能帮我找到更好的解释或上面代码的替代品?
您可以根据自己的逻辑选择以下两个选项之一:
因为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)。 (Check it in ui-rooter docs)
$transitions.onStart({}, function($transition) {
//code ...
return false;
});
我刚刚将 $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/。谁能帮我找到更好的解释或上面代码的替代品?
您可以根据自己的逻辑选择以下两个选项之一:
因为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)。 (Check it in ui-rooter docs)$transitions.onStart({}, function($transition) { //code ... return false; });